根据单元格值动态隐藏列

我有一个工作表,其中包含一系列单元格(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

非常感谢任何帮助!

huilovenai 回答:根据单元格值动态隐藏列

希望这对某人有帮助!

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

我发现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,但这没有用。如果有人知道我为什么想理解。

本文链接:https://www.f2er.com/2763554.html

大家都在问