Потому что все Ваши Range(..) и прочие обращения к диапазону, без указания листа, к которому этот диапазон относится, расцениваются как находящиеся на АКТИВНОМ в данный момент листе
Нужно так
Код
Worksheets(arrSh(I)).Range(...)
Или так
Код
With Worksheets(arrSh(I))
.Rows (..)
.Range(...)
End With
А такой подход
Код
[d18]....
тем более на стадии знакомства с VBA, череват ошибками
Согласие есть продукт при полном непротивлении сторон
Третий раз об одном и том же... В желтой строке первая ссылка на D18 с родителем (указан лист), в середине строки - без листа (ссылка на ячейку активного листа).
Private Sub CheckBox1_Click()
Dim arrSh(), I&
arrSh = Array(1, 2)
For I = 0 To UBound(arrSh)
With Sheets(arrSh(I))
.Rows(17).Hidden = Not CheckBox1
.Range("d18") = " 1"
.Range("d18").AutoFill Destination:=.Range("d18:D20"), Type:=xlFillSeries
End With
Next
Sheets(2).Select
End Sub