Rilevamento dei tipi di fogli in VBA (Microsoft Excel)
Se stai scrivendo macro che elaborano fogli di lavoro diversi in una cartella di lavoro, potresti dover capire che tipo di fogli di lavoro sono presenti nella cartella di lavoro, prima di eseguire qualsiasi elaborazione. Questo può essere particolarmente critico perché alcuni comandi VBA funzionano solo su determinati tipi di fogli di lavoro.
Prima di poter capire quali tipi di fogli di lavoro sono presenti in una cartella di lavoro, è utile sapere in che modo Excel archivia internamente alcuni degli oggetti che compongono la cartella di lavoro. Excel mantiene sia una raccolta di fogli di lavoro che una raccolta di grafici. La raccolta Fogli di lavoro è composta da oggetti foglio di lavoro e la raccolta Grafici è composta da oggetti foglio grafico.
Gli oggetti foglio grafico sono quei grafici che occupano un intero foglio di lavoro; non include quelli che sono oggetti incorporati in un foglio di lavoro.
È interessante notare che anche gli oggetti foglio di lavoro e foglio grafico sono membri della raccolta Fogli. Quindi, se desideri elaborare una cartella di lavoro nell’ordine in cui si trovano i fogli, è più semplice farlo passando attraverso la raccolta Fogli. Quando lo fai, puoi esaminare la proprietà Type dei singoli oggetti all’interno della raccolta per determinare il tipo di oggetto. Excel definisce quattro tipi di oggetti che possono appartenere alla raccolta Fogli:
xlWorksheet. * Questo è un normale foglio di lavoro.
xlChart. * Questo è un grafico.
xlExcel4MacroSheet. * Questo è un foglio macro, come quello utilizzato in Excel 4.0.
xlExcel4IntlMacroSheet. * Questo è un foglio macro internazionale, come utilizzato in Excel 4.0.
Potresti essere tentato di pensare che guardare l’elenco dei tipi di fogli sia sufficiente. È interessante notare, tuttavia, che Excel non restituisce sempre ciò che ci si aspetterebbe dalla proprietà Type. Se invece esamini la proprietà Type per un grafico, restituisce un valore uguale a xlExcel4MacroSheet.
Ciò può causare problemi per qualsiasi macro.
Il modo per aggirare questo, quindi, è confrontare il nome di ogni elemento nella raccolta Fogli con quelli nella raccolta Grafici. Se il nome è in entrambe le raccolte, è lecito ritenere che il foglio sia un grafico. Se non è in entrambi, puoi analizzare ulteriormente per vedere se il foglio di lavoro è uno degli altri tipi. La seguente macro, SheetType, segue esattamente questo processo:
Sub SheetType() Dim iCount As Integer Dim iType As Integer Dim sTemp As String Dim oChart As Chart Dim bFound As Boolean sTemp = "" For iCount = 1 To Sheets.Count iType = Sheets(iCount).Type sTemp = sTemp & Sheets(iCount).Name & " is a" bFound = False For Each oChart In Charts If oChart.Name = Sheets(iCount).Name Then bFound = True End If Next oChart If bFound Then sTemp = sTemp & " chart sheet." Else Select Case iType Case xlWorksheet sTemp = sTemp & " worksheet." Case xlChart sTemp = sTemp & " chart sheet." Case xlExcel4MacroSheet sTemp = sTemp & "n Excel 4 macro sheet." Case xlExcel4IntlMacroSheet sTemp = sTemp & "n Excel 4 international macro sheet" Case Else sTemp = sTemp & "n unknown type of sheet." End Select End If sTemp = sTemp & vbCrLf Next iCount MsgBox sTemp End Sub
Quando si esegue la macro, viene visualizzata una singola finestra di messaggio che mostra il nome di ogni foglio nella cartella di lavoro, insieme al tipo di foglio che è.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (2538) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: