2015-07-08 5 views
0

Я не уверен, почему мой код не работает. Он предназначен для распознавания, когда я нажимаю кнопку (говоря «Hide1») и просматриваю каждый столбец подряд за строкой, ища ячейки, которые имеют значение 1. После этого он должен изменить кнопку, чтобы сказать «Показать 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 
+0

Вы отлаживали свой код? Доходит ли она до линии и не меняет текст или даже не достигает этого? –

ответ

1

Вы должны повторно структура внутреннего цикла:

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 

Пояснение: В первый раз через внешний цикл (для колонки А), номер строки, j, начинается с 4 и продолжается до 54. Но второй раз через внешнюю петлю (для столбца B) j все еще застревает в 54, поэтому никакие строки в столбце B не проверяются. Чтобы исправить это, перезагрузите j по 4 каждый раз, когда вы переходите к новому столбцу, как показано выше.

+0

@ A.Franklin - Спасибо! –

Смежные вопросы