根据单元格值动态隐藏列
Dynamically Hiding Columns Based On Cell Values
我有一个包含一系列单元格 (B15:BL15) 的工作表,其中的公式返回 "Show" 或 "Hide"。当我从表单控件(不是 ActiveX)组合框创建 selection 并将以下宏分配给组合框时,值会发生变化。宏应该根据单元格值显示或隐藏列。
第一次创建 selection 时,无论单元格中的值如何,所有列最终都会隐藏。当我再次 select 时,代码工作正常(即我 select 选项 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
非常感谢任何帮助!
希望这对某人有所帮助!
问题是由代码 运行ning 在所有计算完成和更新范围之前引起的。在计算过程中,范围内的单元格短暂默认为 "hide",这触发了列被隐藏。
我发现 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
但这没有用。如果有人知道为什么我很想明白。
我有一个包含一系列单元格 (B15:BL15) 的工作表,其中的公式返回 "Show" 或 "Hide"。当我从表单控件(不是 ActiveX)组合框创建 selection 并将以下宏分配给组合框时,值会发生变化。宏应该根据单元格值显示或隐藏列。
第一次创建 selection 时,无论单元格中的值如何,所有列最终都会隐藏。当我再次 select 时,代码工作正常(即我 select 选项 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
非常感谢任何帮助!
希望这对某人有所帮助!
问题是由代码 运行ning 在所有计算完成和更新范围之前引起的。在计算过程中,范围内的单元格短暂默认为 "hide",这触发了列被隐藏。
我发现 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
但这没有用。如果有人知道为什么我很想明白。