excel - 基于单元格值动态隐藏列

标签 excel vba show-hide

我有一个包含一系列单元格(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

非常感谢任何帮助!

最佳答案

希望这对某人有帮助!

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

我找到了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但这没有用。如果有人知道为什么我很想了解。

关于excel - 基于单元格值动态隐藏列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59756267/

相关文章:

javascript - 根据下拉菜单中的选择执行公式/计算?

excel - 如何使用 vba 将过滤后的值仅粘贴到受此类过滤器影响的单元格中?

javascript - 如果选择了 PHP 选项,则显示文本区域

jquery - 通过触发器打开一个 div,只要鼠标位于打开的 div 中,就将其保持打开状态

java - 如何在从该行找到特定字符串后打印 Excel 工作表的整行?

excel - 查找字符串中包含子字符串的所有行,并返回 ms-excel 中所有此类行的第一个单元格

excel - 如何为多变量索引匹配公式创建 UDF

javascript - Jquery Slidetoggle 显示隐藏 一次一个 div

excel - VBA 如何打开另一个工作簿?

excel - 将变量声明为 Internet Explorer 会生成编译错误 : user-defined type not defined