L’azienda di Richard, come molte altre, utilizza spesso Excel. In effetti, hanno migliaia e migliaia di cartelle di lavoro di Excel che hanno raccolto nel corso degli anni. Richard ha bisogno di un modo per scoprire quale di queste cartelle di lavoro contiene macro VBA, senza la necessità di aprire e ispezionare singolarmente ciascuna cartella di lavoro. Si chiede se ci sia un modo semplice per farlo.

Un modo piuttosto semplicistico per trovare tutte le cartelle di lavoro contenenti macro è cercare semplicemente i file che utilizzano le estensioni XLSM o XLSB.

Le cartelle di lavoro che contengono macro devono essere archiviate nei file utilizzando queste estensioni. Sebbene non sia infallibile al 100%, è un buon punto di partenza.

Puoi anche usare le capacità di ricerca di Windows (al di fuori di Excel)

e cerca qualsiasi file che contenga il testo “End Sub” o “End Function”. Ciò identificherà rapidamente qualsiasi potenziale cartella di lavoro candidata, poiché qualsiasi procedura VBA deve utilizzare una di queste due istruzioni alla fine.

Se si utilizzano cartelle di lavoro legacy (quelle sviluppate utilizzando il formato di file di Excel 2003), è effettivamente necessario guardare all’interno di ciascuna cartella di lavoro. Questo può essere fatto a livello di programmazione, il che significa che potresti avere una macro che apre ogni cartella di lavoro in una cartella e la esamina per vedere se ci sono macro al suo interno.

Ad esempio, è possibile creare una macro che passi attraverso ciascuno dei file in una directory e determina se il file è una cartella di lavoro di Excel. Può quindi aprire il file e verificare se contiene un progetto VBA al suo interno.

Sub FindMacros()

Dim sPath As String     Dim sFile As String     Dim sFoundFiles As String

'specify directory to use - must end in "\"

sPath = "C:\MyData\Excel Data\"



sFile = Dir(sPath)

Do While sFile <> ""

If InStr(sFile, ".xls") > 0 Then             Workbooks.Open (sPath & sFile)

If Workbooks(sFile).HasVBProject Then                 sFoundFiles = sFoundFiles & sFile & vbCrLf             End If             Workbooks(sFile).Close (False)

End If         sFile = Dir     ' Get next filename     Loop     If Len(sFoundFiles) = 0 Then         MsgBox "No workbooks found that contain macros"

Else         sFoundFiles = "The following workbooks contain macros:" & _           vbCrLf & vbCrLf & sFoundFiles         MsgBox sFoundFiles     End If End Sub

In questo esempio viene utilizzata la proprietà HasVBProject (introdotta nel modello a oggetti di Excel in Excel 2007) per determinare se il file ha delle macro o meno. Al termine, la macro visualizza una finestra di messaggio che elenca quei fogli di lavoro contenenti macro.

_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 (12466) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.

Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: