Изменить модуль - одним щелчком мыши переключить кнопку VBA Excel - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть следующий код в модуле в Excel, однако я хотел бы назначить его для кнопки переключения.

Sub Weeks3Hide()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Weekly Hoist Hours")

wsLR = ws.Cells(Rows.Count, 7).End(xlUp).Row

For x = 14 To wsLR
    'analyze date, see if it's 3 weeks or older
    If ws.Cells(x, 7) <= Date - 21 Then
        'hide
        ws.Range("a" & x).EntireRow.Hidden = True
    End If
Next x

End Sub

Я до сих пор получил это: Однако есть ошибка вэто.

Private Sub ToggleButton4_Click()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Weekly Hoist Hours")

WsLR = ws.Cells(Rows.Count, 7).End(xlUp).Row
If ToggleButton4.Value = True Then
For x = 14 To WsLR
    'analyze date, see if it's 3 weeks or older
    If ws.Cells(x, 7) <= Date - 21 Then
        'hide
        ws.Range("a" & x).EntireRow.Hidden = True
    End If
Next x
Else
  ws.Range(WsLR).EntireRow.Hidden = False
End If
End Sub

Буду признателен за любую помощь!Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Первое, что нужно сделать, это показать скрытые строки.Затем я перебрал бы ячейки и использовал бы Union для создания Range of Rows.Таким образом, вы можете скрыть все строки одновременно.

Private Sub ToggleButton4_Click()
    Dim cell As Range, Rows As Range

    With ThisWorkbook.Sheets("Weekly Hoist Hours")
        For Each cell In .Range(Cells(14, 7), .Cells(Rows.Count, 7).End(xlUp))
            .Rows.Hidden = False
            If Not .ToggleButton1.Value Then Exit Sub

            If cell.Value <= Date - 21 Then
                If Rows Is Nothing Then
                    Set Rows = cell.EntireRow
                Else
                    Set Rows = Union(Rows, cell.EntireRow)
                End If
            End If
        Next
        Rows.Hidden = False
    End With

End Sub
0 голосов
/ 27 ноября 2018

Эта строка ws.Range(WsLR).EntireRow.Hidden = False.

Вы не можете ссылаться на диапазон просто с помощью номера.Если вы пытаетесь скрыть строку, вы можете использовать ws.Rows(WsLR).EntireRow.Hidden = False или что-то вроде ws.Rows("A2:A" & WsLR).EntireRow.Hidden = False.

...