【问题标题】:How to display SUM of visible cells in a userform label?如何在用户表单标签中显示可见单元格的总和?
【发布时间】:2022-06-10 21:45:42
【问题描述】:

我想在用户表单标签中显示 D 列中可见单元格的总和,并在电子表格被过滤时自动更新。

我有这个代码

Private Sub SUM_click()
    Me.SUM.caption = range ("AA2")
End Sub

这是有问题的。

    1. 我在单元格 AA2 中使用了 SUM 公式。
      如果可能,我想避免在任何单元格中使用公式。
    1. 返回值不排除隐藏的行。
    1. 点击标签后会显示值。
      我希望它自动显示。

【问题讨论】:

标签: excel vba userform


【解决方案1】:

在用户窗体中自动显示小计

这表明它并不像看起来那么简单。

当然,您可能从工作表的Worksheet_Calculate 事件中获利 每当(启用)计算处理新结果时,通过 VBA 获取(可见单元格的)小计。 这在过滤和/或更改值时很有效,Worksheet_Change 事件不会涵盖过滤

Private Sub Worksheet_Calculate()
Dim subtotal As Double
    subtotal = Sheet1.Evaluate("=Subtotal(109,D:D)")     ' argument 109 sums up only visible cells!
    Debug.Print "Subtotal: " & Format(subtotal, "0.00")  ' display in VB Editor's immediate window
End Sub

...但是没有同步事件来刷新用户窗体代码中的标签。


所以我建议以下棘手的解决方法利用 ListBox 属性RowSource

  • 将小计公式=SUBTOTAL(109,D:D) 添加到单元格AA2
  • 而不是标签...让列表框显示绑定到.RowSource;每当小计发生变化时,这将反映在绑定列表框的唯一列表值中。

通过.SpecialEffect = fmSpecialEffectFlat 定义外观使列表框看起来几乎像一个标签。小美人误区:背景颜色不能修改

用户窗体代码示例

Private Sub UserForm_Initialize()
With Me.ListBox1                ' << rename control to any other name
    .ColumnCount = 1            ' define columncount
    .ColumnWidths = .Width - 8  ' play around with small sizes to avoid scroll bars
    .Height = 12                
    .RowSource = "Sheet1!AA2"       ' reference to cell containing subtotal formula
    .SpecialEffect = fmSpecialEffectFlat
    .ListIndex = 0          ' activate first (and only) record
End With

提示

要在表格中启用编辑或过滤等并发操作,您需要显示用户窗体 modeless,例如通过

    With New UserForm1
        .Show vbModeless
    End With

评论中建议的替代方案

感谢@norie 的提示,也可以从文本框的.ControlSource 属性(与标签更相似)中获利,而无需进一步修饰。然而,这种有前途的方法需要进一步(甚至更复杂?)步骤:文本框允许输入会覆盖引用单元格中不需要的初始公式。

可能的出路我不会在这里开发:防止关键事件条目(查看其他 SO 帖子)或使用 TextBox1_Change 事件在每次文本框更改时重写公式(可疑),放置一个阻止对文本框等的控制。

【讨论】:

  • T.M.您是否有理由不使用文本框并使用 ControlSource 属性填充它?
  • @norie 谢谢,当然这是另一种可能性,尽管有一些警告;会将您的提示整合到我的帖子中:-)
  • Userform_initialize + 单元格中的小计公式完美运行,谢谢。我什至可以通过属性控件更改列表框的背景颜色,因此所有内容都无缝融入了用户窗体框(:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多