2016-12-04 7 views
-3

Тим Уильямс написал этот отличный скрипт для показа и скрытия строк в зависимости от имени кнопки. Поэтому, если я назову кнопку «btn_5_3_H», она скроет строки 5,6,7.Сокрытие столбцов по названию кнопки

Мой вопрос: как я могу заставить этот скрипт работать для сокрытия столбцов? По-видимому, столбцы не работают с цифрами, а с буквами, и как-то скрипт не будет принимать ввод типа «btn_E_3_H».

Sub ShowHideRows() 

    Dim arr 

    'split the calling button name into an array 
    ' (array will be zero-based) 
    arr = Split(Application.Caller, "_") 

    '**EDIT** check array is expected size... 
    If UBound(arr) <> 3 Then Exit Sub 

    If IsNumeric(arr(1)) and IsNumeric(arr(2)) Then 
     With Me 'if the code is in the sheet module, else "ActiveSheet" 
      .Unprotect Password:="abc" 

      'arr(1) determines start row 
      'arr(2) determines # of rows 
      'arr(3) determines if rows are hidden or not 
      .Cells(arr(1), 1).Resize(arr(2), 1).EntireRow.Hidden = (arr(3) = "H") 
      .Protect Password:="abc" 
     End With 
    End If 
End Sub 

Спасибо за ваши комментарии

ответ

0

Не знаю, где вы получили впечатление, что .Cells() не работает с числовыми значениями - это не проблема. Проблема в том, что вы используете буквы, вы не можете их протестировать IsNumeric и ожидать, что они будут работать. Это работает с буквенными идентификаторами:

Sub ShowHideColumns() 
    Dim arr() As String 
    arr = Split(Application.Caller, "_") 
    If UBound(arr) <> 3 Then Exit Sub 
    With Me 'if the code is in the sheet module, else "ActiveSheet" 
     .Unprotect Password:="abc" 
     .Cells(1, arr(1)).Resize(1, arr(2)).EntireColumn.Hidden = (arr(3) = "H") 
     .Protect Password:="abc" 
    End With 
End Sub 
+0

Потрясающие Большое спасибо – Dennis