根据单元格值隐藏列
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,如上所示。
我不确定为什么我的代码不起作用。它旨在识别我何时按下按钮(说 "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,如上所示。