Как скрыть строки в другом листе, используя кнопку - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь скрыть несколько строк на другом листе с помощью кнопки.Цель состоит в том, чтобы при необходимости скрыть строки с помощью кнопки, чтобы форматирование и содержимое этих строк не затрагивалось.В настоящее время я удаляю те строки, которые нарушают форматирование и требуют доработки.

Я также ничего не знаю о VBA, поэтому прошу прощения за мое незнание.

Sub Macro() 
    Rows("7:9").Select 
    If Rows("7:9").Hidden=True Then 
        Selection.EntireRow.Hidden=False 
    Else 
        Selection.EntireRowRow.Hidden=True 
    End If 
End Sub

1 Ответ

0 голосов
/ 08 октября 2018

Ваш код будет скрывать / показывать строки в активном листе.

Чтобы сделать это на конкретном листе, вам нужно указать, на каком листе находятся строки - и вы делаете это без , выбирая строки, что означает, что вы не можете использовать Selection.

Синтаксис также должен быть включен - поэтому .EntireRowRow никогда не будет работать.

В коде я использовал оператор With ... End With для сокращения кода.

Sub Macro()
    With Worksheets("Sheet1").Rows("7:9")
        If .Hidden = True Then
            .EntireRow.Hidden = False
        Else
            .EntireRow.Hidden = True
        End If
    End With
End Sub  

Если не использовать With, это будет выглядеть следующим образом:

Sub Macro()
    If Worksheets("Sheet1").Rows("7:9").Hidden = True Then
        Worksheets("Sheet1").Rows("7:9").EntireRow.Hidden = False
    Else
        Worksheets("Sheet1").Rows("7:9").EntireRow.Hidden = True
    End If
End Sub

Вы сокращаете код дальше, меняя значение ИСТИНА на ЛОЖЬ и наоборот.

Sub Macro()
    With Worksheets("Sheet1").Rows("7:9")
        .EntireRow.Hidden = Not .EntireRow.Hidden
    End With
End Sub

Оператор Not переключит логическое значение TRUE на FALSE и FALSE на TRUE.
.EntireRow.Hidden вернет TRUE или FALSE, поэтому Not .EntireRow.Hidden вернет противоположное.

Если вам нужен текущий индекс видимых строк, вы можете использовать функцию SUBTOTAL для подсчета видимых ячеек, содержащих значение.
Это предполагает, что все ячейки в столбце B содержат значениеи использует COUNTA функцию Промежуточный итог .
Формула, набранная в A2, будет иметь вид: =SUBTOTAL(103, $B$1:$B2) и перетаскивается вниз.
Примечание что ссылка на вторую ячейку использует относительную ссылку для номера строки - при перетаскивании формула обновится до =SUBTOTAL(103, $B$1:$B3) ... $B$1:$B4 и так далее.103 в функции указывает, что скрытые ячейки не включены в счет.

Чтобы добавить это в код, который вы хотите обновить до:

Sub Macro()
    With Worksheets("Sheet1")

        'A2:A & last row
        'OFFSET(,-1) is used so it counts values in column B to find the last row
        'and then references column A for the final range.
        With .Range("A2", .Cells(.Rows.Count, 2).End(xlUp).Offset(, -1))
            .FormulaR1C1 = "=SUBTOTAL(103, R1C2:RC2)"
        End With

        With .Rows("7:9")
            .EntireRow.Hidden = Not .EntireRow.Hidden
        End With

    End With
End Sub
...