根据单元格值隐藏列

我不知道为什么我的代码不工作。 它意在识别何时按下button(说“Hide1”)并逐行search每个列,查找具有值1单元格。一旦这样做,它应该将button更改为“显示1” 。 但是,当我运行它时,根本没有任何反应。

这是Excel的macros:

 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,如上所示。

Interesting Posts