【问题标题】:Formatting Report Textbox After Returning Value返回值后格式化报表文本框
【发布时间】:2020-07-06 16:02:18
【问题描述】:

这是我在TextBox Control Source with Nested IIF Statement is Returning Same Column Regardless的原始帖子的后续帖子

Lee Mac 能够帮助我获得适当的语法,以根据另一个文本框的值返回 3 个潜在值中的 1 个。现在我正在努力以适当的格式获取返回值。

值可以是货币或百分比,它们会在同一个文本框中,所以我一直在尝试使用事件过程来格式化值,但没有发生任何变化。

我最近的尝试,导致该值始终为#.####:

Private Sub Detail_Format()

If Me.Allowance_Type = "% Off Invoice" Then
    Me.txtbox4.Value = Format(Me.txtbox4.Value, "0.00%")
End If
If Me.Allowance_Type = "Per Pound" Then
    Me.txtbox4.Value = Format(Me.txtbox4.Value, "$###,###.##")
End If
If Me.Allowance_Type = "Per Case" Then
    Me.txtbox4.Value = Format(Me.txtbox4.Value, "$###,###.##")
End If

End Sub

我还尝试了各种其他事件,例如Report_Load 等,并且我尝试过更改线路: If Me.Allowance_Type =If Me.Allowance_Type.Value = 但这会导致 #Name?

是否可以有 1 个文本框可以有条件地格式化为货币或百分比?提前致谢!

【问题讨论】:

  • 这是我在 Access 标记问题中经常看到的一种趋势:(1) OP 发布了一个很好的问题 (2) 问题未能封装所有您需要知道的回答 (3) 回答者给出基于所提供内容的合理建议 (4) OP 说“它不起作用” (5) 所有进一步尝试参与 OP 的尝试都会被忽略。我开始认为这些问题不值得努力。一个更好的选择是 Teamviewer 会话,这样有经验的人可以帮助 OP 解决他们的问题。
  • 抱歉,很遗憾,我还不能回到这个问题上。我的其他任务必须优先于此 Access,因为这更像是“时间允许”的任务。我将很快审查提供的答案。

标签: vba ms-access


【解决方案1】:

可以在 ControlSource 中执行表达式并消除 VBA。

=Format([fieldname], IIf([Allowance_Type] LIKE "Per*", "Currency", "Percent"))

或者在返回值的过程中包含这种格式。

=Format(Switch([Allowance Type]="% Off Invoice",[Freight Paid % OI], ([Allowance Type]="Per Pound",[Freight Paid / LB], [Allowance Type]="Per Case",[Freight Paid/_Case]), IIf([Allowance_Type] LIKE "Per*", "Currency", "Percent"))

格式事件仅在 PrintPreview 中触发或直接发送到打印机,而不是报表视图。

建议不要在命名约定中使用空格或标点符号/特殊字符(下划线除外)。

【讨论】:

  • 感谢您的建议,我喜欢消除 VBA 的想法,很高兴知道报表视图中不会触发格式事件。对于表达式,您的意思是将其放在返回值的 TextBox 中吗?截至目前,我目前在该 TextBox 的 ControlSource 中有以下表达式:=IIf([Allowance Type]="% Off Invoice",[Freight Paid % OI],IIf([Allowance Type]="Per Pound",[Freight Paid / LB],IIf([Allowance Type]="Per Case",[Freight Paid/_Case],"")))
  • 查看修改后的答案。
【解决方案2】:

尝试使用.Format 属性,如:

If Me.Allowance_Type = "Per Case" Then
    Me.txtbox4.Format = "$###,###.##"
End If

【讨论】:

  • 感谢您的建议!我尝试了它并没有改变任何东西,我得到了#Name? 结果。然后我将事件从Detail_Format 更改为Details_Format,我得到了数字,但格式仍然不正确。
  • Detail_Format 是报告详细信息部分事件处理程序的标准名称。您是否将“详细信息”部分或其他部分之一重命名为“详细信息”?尝试在代码中将所有选项设置为 same 格式(不同于“文本格式”属性)。你知道那种格式吗?还是什么都没发生?
  • 您好,抱歉耽搁了。我没有重命名该部分,它仍然是“详细信息”。如果我理解@June7 的答案,则不会在报告视图中触发格式事件。所以我想我可能会用这个 VBA 一遍又一遍地敲打我的头,因为我正在尝试一个可能永远不会发生的 Format 事件。
【解决方案3】:

根据 my comment 在您的另一个问题中,如果您允许自己将数据转换为字符串,而不是保留原始数据类型(因此保留原始精度),那么您可以直接使用 Format 函数你的Switch 表达式,例如:

=Switch
(
    [Allowance Type] = "% Off Invoice", Format([Freight Paid % OI],  "0.00%"),
    [Allowance Type] = "Per Pound",     Format([Freight Paid / LB],  "$###,###.##"), 
    [Allowance Type] = "Per Case",      Format([Freight Paid/_Case], "$###,###.##"),
    True, ""
)

否则,我建议使用事件处理程序来更改文本框的 .Format 属性,该属性由绑定到您的 [Allowance Type] 字段的表单控件的 AfterUpdate 事件触发。

【讨论】:

  • 感谢您提供此信息。我正在尝试[Allowance Type] 字段的AfterUpdate,但我必须说,我对 Access 的缺乏经验让我对此有点迷失......这是我在报告中创建的事件: 似乎根本没有调用这个事件。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多