Le macro vengono spesso utilizzate per suddividere, suddividere in dadi e altrimenti elaborare le informazioni contenute nelle cartelle di lavoro. Ciò presume, ovviamente, che la cartella di lavoro che contiene le informazioni sia effettivamente aperta. Se non lo è, la tua macro dovrà ovviamente includere il codice per aprire effettivamente la cartella di lavoro necessaria.

L’apertura di una cartella di lavoro può davvero rallentare una macro; ci vuole tempo per accedere al disco e caricare il file. Pertanto, se la tua macro può verificare se una cartella di lavoro è aperta prima di passare attraverso il fastidio di provare effettivamente ad aprirla, potresti accelerare notevolmente le tue macro se la cartella di lavoro è già aperta.

Un modo molto flessibile per affrontare l’attività di controllo se una cartella di lavoro è aperta consiste nell’usare una funzione che esegue il controllo e quindi restituisce semplicemente un valore VERO o FALSO a seconda che la cartella di lavoro sia aperta. La seguente breve macro esegue questa breve operazione:

Function AlreadyOpen(sFname As String) As Boolean     Dim wkb As Workbook     On Error Resume Next     Set wkb = Workbooks(sFname)

AlreadyOpen = Not wkb Is Nothing     Set wkb = Nothing End Function

Per utilizzare la funzione è sufficiente passargli il nome della cartella di lavoro che si desidera controllare, nel modo seguente:

sFilename = "MyFileName.xls"

sPath = "C:\MyFolder\MySubFolder\"

If AlreadyOpen(sFilename) Then         'Do not have to open     Else         Workbooks.Open sPath & sFilename     End If

_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 (3104) 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: