根据单元格值隐藏列

Hiding columns based upon cell value

我不确定为什么我的代码不起作用。它旨在识别我何时按下按钮(说 "Hide1")并逐行搜索每一列,查找具有值 1 的单元格 一旦执行此操作,它应该更改按钮说 "Show 1"。然而,当我运行它时,根本没有任何反应。

这是 Excel 的宏:

Sub Hide_columns()

Dim i As Integer
Dim j As Integer

i = 3
j = 4

Do Until i = 26
    Do Until j = 54
        With ActiveSheet.Cells(i, j)
            If .Value = 1 Then
                ActiveSheet.Columns(i).EntireColumn.Hidden = True
                With ActiveSheet.Shapes(Application.Caller).TextFrame.Characters
                    If .Text = "Show 1" Then
                        .Text = "Hide 1"
                    ElseIf .Text = "Hide 1" Then
                        .Text = "Show 1"
                    Else
                        MsgBox ("VBA has gone wrong.")
                        Exit Sub
                    End If
                End With
            End If
        End With
        j = j + 1
    Loop
    i = i + 1
Loop

End Sub

您必须重新构造内循环:

Sub Hide_columns()

Dim i As Integer
Dim j As Integer

i = 3

Do Until i = 26
    j = 4
    Do Until j = 54
        With ActiveSheet.Cells(i, j)
            If .Value = 1 Then
            MsgBox i & vbCrLf & j
                ActiveSheet.Columns(i).EntireColumn.Hidden = True
                With ActiveSheet.Shapes(Application.Caller).TextFrame.Characters
                    If .Text = "Show 1" Then
                        .Text = "Hide 1"
                    ElseIf .Text = "Hide 1" Then
                        .Text = "Show 1"
                    Else
                        MsgBox ("VBA has gone wrong.")
                        Exit Sub
                    End If
                End With
            End If
        End With
        j = j + 1
    Loop
    i = i + 1
Loop
End Sub

解释:第一次通过外循环(对于列 A),行号 j 从 4 开始循环直到 54。但是第二次通过外循环(对于列B), j 仍然停留在 54,所以 B 列中没有行被检查。要解决此问题,请在每次移动到新列时将 j 重置为 4,如上所示。