Bucle de tablas y hojas de trabajo como hojas sin éxito. ¿Exactamente qué causó los errores?

Traté de crear gráficas y hojas como variantes.

Sub ShowSheets(vSheets() As Variant) Dim i As Long For i = LBound(vSheets, 1) To UBound(vSheets, 1) Dim wks As Variant Set wks = ThisWorkbook.Sheets(vSheets(i, 1)) wks.Visible = xlSheetVisible Next i End Sub 

vSheets() contiene los nombres de las siguientes hojas y charts:

 SheetName1 SheetName2 ChartName1 SheetName3 SheetName4 

La subrutina no tuvo éxito. wks.Visible = xlSheetVisible un error en la fila wks.Visible = xlSheetVisible cuando wks era la hoja de trabajo llamada SheetName3 .

El error fue:

 Run-time error '-2147417848 (80010108)': Method 'Visible' of object '_Worksheet' failed 

¿Por qué recibí un error en esa línea específica?

La siguiente subrutina tampoco tuvo éxito:

 Sub ShowSheets(vSheets() As Variant) Dim i As Long For i = LBound(vSheets, 1) To UBound(vSheets, 1) ThisWorkbook.Sheets(vSheets(i, 1)).Visible = xlSheetVisible Next i End Sub 

Recibí un error en la misma situación. En la fila ThisWorkbook.Sheets(vSheets(i, 1)).Visible = xlSheetVisible , cuando ThisWorkbook.Sheets(vSheets(i, 1)).Name was SheetName3 . No entiendo por qué la subrutina anterior no funcionó.

Me imagino que debería haber recibido un error cuando wks era el gráfico. Eso lo habría entendido. No entiendo por qué recibí el error cuando wks era la primera hoja de trabajo después del gráfico.

La siguiente subrutina funciona, pero todavía no puedo entender por qué recibí el error donde lo obtuve en las subrutinas anteriores:

¿Qué causó los errores en las dos primeras subrutinas? ¿Por qué recibí errores cuando la hoja de trabajo era SheetName3 ?

 Sub ShowSheets(vSheets() As Variant) Dim i As Long For i = LBound(vSheets, 1) To UBound(vSheets, 1) If TypeName(ThisWorkbook.Sheets(vSheets(i, 1))) = "Worksheet" Then ThisWorkbook.WorkSheets(vSheets(i, 1)).Visible = xlSheetVisible End If Next i For i = LBound(vSheets, 1) To UBound(vSheets, 1) Debug.Print (TypeName(ThisWorkbook.Sheets(vSheets(i, 1)))) If TypeName(ThisWorkbook.Sheets(vSheets(i, 1))) = "Chart" Then ThisWorkbook.Charts(vSheets(i, 1)).Visible = xlSheetVisible End If Next i End Sub