Ваш код будет скрывать / показывать строки в активном листе.
Чтобы сделать это на конкретном листе, вам нужно указать, на каком листе находятся строки - и вы делаете это без , выбирая строки, что означает, что вы не можете использовать 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