【问题标题】:Dynamically Hiding Columns Based On Cell Values基于单元格值动态隐藏列
【发布时间】:2020-05-02 12:09:30
【问题描述】:

我有一个包含一系列单元格 (B15:BL15) 的工作表,其中的公式返回“显示”或“隐藏”。当我从表单控件(不是 ActiveX)组合框中进行选择并将下面的宏分配给组合框时,值会发生变化。该宏应该根据单元格值显示或隐藏列。

我第一次进行选择时,无论单元格中的值如何,所有列最终都会隐藏。当我再次选择它时,代码工作正常(即我选择选项 A 并且范围内的所有列都被隐藏。我选择选项 B 然后返回选项 A 并且现在显示和隐藏正确的列。)。我在这里遗漏了什么?

Option Explicit

Sub ShowHide()

Cells.Columns.EntireColumn.Hidden = False    ' Added to unhide all of the columns first.

Dim c As Range

For Each c In Range("B15:BL15").Cells        ' Range of cells containing the formulas

With c
    If .Value = "Hide" Then
       .EntireColumn.Hidden = True
    Else
        .EntireColumn.Hidden = False
    End If

End With

Next c

End Sub

非常感谢任何帮助!

【问题讨论】:

  • 选项 A / B 做什么来触发 ShowHide()?我测试了代码,它似乎可以正常工作。
  • 恐怕您的活动工作表不是您要处理的工作表。尝试根据其名称定义您的工作表并再次运行代码。代码很简单,必须做显而易见的事情......运行Debug.Print ActivePage.Name,也许你会有一个惊喜......
  • 组合框(在工作表 1 上)输出馈送到另一个工作表(工作表 2)中的立方体公式。然后,该集合由工作表 1 中的 cuberankedmember 公式引用。如果该公式返回空白,则该范围内的公式将返回“隐藏”。如果没有,它将返回“显示”。示例:我从组合框(表 1)中选择水果,并在表 2 中创建一个集合,其中包含苹果、橙子、香蕉。工作表 1 中的 A - E 列包含 cuberankedmember 公式,A - C 将包含 Apples、Oranges 和 Bananas。 D & E 为空白。 A - C 将是“显示”,D & E 将是“隐藏”
  • “我将以下宏分配给组合框”是什么意思?此过程是否由combo_Change 事件调用?如果您的代码在适当的工作表上运行,并且第 15 行存在必要的参考值,则代码必须按预期运行。
  • 嗨@FaneDuru - 抱歉编辑。它没有用。我创建了表单控件组合框,当您右键单击它时,您可以选择“分配宏”,因此我将 ShowHude 子分配给它。我没有做 combo_change 事件。

标签: excel vba show-hide


【解决方案1】:

希望这对某人有所帮助!

问题是由在所有计算完成和更新范围之前运行的代码引起的。在计算过程中,范围内的单元格会短暂默认为“隐藏”,这会触发该列被隐藏。

我发现Application.CalculateUntilAsyncQueriesDone 在所有计算完成并更新范围后强制代码运行。修改后的代码如下:

Sub ShowHide()

Dim c As Long

Application.ScreenUpdating = False
Application.CalculateUntilAsyncQueriesDone

For c = 2 To 64
    If Cells(16, c).Value = "Hide" Then
        Columns(c).Hidden = True
    Else
        Columns(c).Hidden = False
    End If
Next c
Application.ScreenUpdating = True

End Sub

注意:我看到多个线程使用和 IF 语句,然后是 Application.CalculationState = xlDone,但这不起作用。如果有人知道我为什么愿意理解。

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多