A coleção Sheets
aceita apenas um argumento de índice para o método padrão ( Item
). Você não pode passar um array para ele. Você precisa fazer um loop nos itens da matriz e usá-los um por um.
O seguinte mostra como fazer isso:
'============================================================================================
' Module : <in the "Client Info" sheet module>
' Version : 0.1.0
' Part : 1 of 1
' References : N/A
' Source : https://superuser.com/a/1328507/763880
'============================================================================================
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("'Client Info'!D20")) Is Nothing Then
Dim enumVisibility As Excel.XlSheetVisibility
If Range("'Client Info'!D20").Value > 0 Then
enumVisibility = xlSheetVisible
Else
enumVisibility = xlSheetHidden
End If
Dim varSheetName As Variant
For Each varSheetName In Array("PULLSHEET1", "PULLSHEET2", "PULLSHEET3")
Sheets(varSheetName).Visible = enumVisibility
Next varSheetName
End If
End Sub
Note que removi o And Not IsEmpty(Range("'Client Info'!D20"))
redundante.
Você também pode ver que usei uma variável para armazenar a visibilidade necessária e movi a configuração real dela para depois da instrução If
. Desta forma, apenas um loop precisa ser usado em vez de dois.
Se todos os nomes de folhas contiverem um nome base com um sufixo numérico, um loop melhor seria:
Dim lngSheetNumber As Long
For lngSheetNumber = 1 To 3
Sheets("PULLSHEET" & lngSheetNumber).Visible = enumVisibility
Next lngSheetNumber