Una guida per lavorare con le cartelle di lavoro in vba
In Excel, una cartella di lavoro è uno dei più importanti tra tutti gli oggetti Excel ed è anche essenziale capire come utilizzare e fare riferimento alle cartelle di lavoro quando si scrivono codici VBA.
In questo tutorial esploreremo tutte le cose che devi sapere. Ma la prima cosa che devi capire sono gli oggetti coinvolti nel lavorare con le cartelle di lavoro in VBA.
Cose da sapere:
- Oggetto raccoglitori
- Oggetto raccoglitore
Questi due oggetti sembrano uguali, ma c’è una differenza fondamentale tra i due.
Oggetto raccoglitori
In VBA, l’oggetto Workbooks rappresenta la raccolta di cartelle di lavoro aperte in Microsoft Excel. Immagina di avere dieci schedari aperti contemporaneamente. E vuoi fare riferimento all’unica cartella di lavoro tra loro. In questo caso, è necessario utilizzare l’oggetto cartella di lavoro per fare riferimento a questa cartella di lavoro utilizzando il suo nome.
Oggetto raccoglitore
In VBA, l’oggetto cartella di lavoro rappresenta una singola cartella di lavoro tra tutte le cartelle di lavoro attualmente aperte in Microsoft Excel. Il modo migliore per capirlo è pensare a dichiarare una variabile come raccoglitore che si desidera utilizzare per fare riferimento a un particolare raccoglitore nel codice.
Collegamenti utili : Aggiungi una scheda Sviluppatore | Editor di Visual Basic | Esegui una macro | Cartella di lavoro sulle macro personali
Fare riferimento a una cartella di lavoro in VBA
Per lavorare con le cartelle di lavoro in VBA, la prima cosa che devi sapere è come fare riferimento a una cartella di lavoro in una macro. Ecco la cosa felice: ci sono diversi modi per fare riferimento a una cartella di lavoro. E in futuro esploreremo ciascuno di essi.
1. Per nome
Il modo più semplice per fare riferimento a una cartella di lavoro è tramite il nome. Supponiamo di voler attivare la cartella di lavoro Book1.xlsx, in questo caso il codice da utilizzare dovrebbe essere il seguente:
Fare riferimento a una cartella di lavoro con il suo nome è abbastanza semplice, è necessario specificare il nome e il gioco è fatto. Ma c’è una cosa di cui devi occuparti : se una cartella di lavoro non viene salvata, devi utilizzare solo il nome. E se è registrato, devi utilizzare il nome con l’estensione.
2. Per numero
Quando apri una cartella di lavoro, Excel assegna un numero di indice a quella cartella di lavoro e puoi utilizzare quel numero per fare riferimento a una cartella di lavoro. La cartella di lavoro aperta per prima avrà il numero di indice “1” e la seconda avrà “2” e così via.
Questo metodo potrebbe sembrarti meno reale perché è difficile sapere quale cartella di lavoro si trova su quale numero di indice. Esiste però una situazione in cui questo metodo è molto utile da utilizzare, ovvero il ciclo continuo di tutte le cartelle di lavoro aperte.
3. Da questa cartella di lavoro
Questa cartella di lavoro è una proprietà che ti aiuta a fare riferimento alla cartella di lavoro in cui scrivi il codice. Supponiamo che tu scriva il codice in “Book1” e utilizzi ThisWorkbook per salvare la cartella di lavoro. Ora, anche quando cambi il nome della cartella di lavoro, non sarà necessario modificare il codice.
Il codice precedente conta il numero di fogli nella cartella di lavoro in cui è scritto questo codice e visualizza una finestra di messaggio con il risultato.
4. Per ActiveWorkbook
Se vuoi fare riferimento a una cartella di lavoro attiva, devi utilizzare la proprietà “ActiveWorkbook”. L’utilizzo migliore di questa proprietà è quando si è sicuri di quale cartella di lavoro è attivata in questo momento. Oppure hai già attivato la cartella di lavoro su cui vuoi lavorare.
Il codice precedente attiva prima la cartella di lavoro “Book1”, quindi utilizza la proprietà della cartella di lavoro attiva per salvare e chiudere la cartella di lavoro attiva.
Accedi a tutti i metodi e le proprietà
In VBA, ogni volta che si fa riferimento a un oggetto, VBA consente di accedere alle proprietà e ai metodi forniti con quell’oggetto. Allo stesso modo, l’oggetto cartella di lavoro viene fornito con proprietà e metodi. Per accedervi è necessario prima definire la cartella di lavoro, quindi inserire un punto .
Nel momento in cui si digita un punto (.), viene visualizzato l’elenco di proprietà e metodi. Ora devi avere una domanda su come identificare quale è una proprietà e quale è un metodo.
Ecco il trucco. Se guardi da vicino, puoi identificare un mattoncino verde in movimento e una mano grigia davanti a ciascun nome nell’elenco. Quindi tutte le proprietà hanno questa mano grigia prima del nome e i metodi hanno un mattoncino verde in movimento.
Ad esempio, per utilizzare un metodo con una cartella di lavoro
Immagina di voler chiudere una cartella di lavoro (che è un metodo), devi digitare o selezionare “Chiudi” dall’elenco.
Successivamente è necessario inserire le parentesi iniziali in modo che IntelliSense sappia quali argomenti è necessario impostare.
Con il metodo close devi definire tre argomenti e come puoi vedere tutti questi argomenti sono facoltativi e puoi ignorarli se lo desideri. Ma alcuni metodi non hanno argomenti (ad esempio: attiva)
Ad esempio, per utilizzare una proprietà con una cartella di lavoro
Immagina di voler contare i fogli della cartella di lavoro “libro1”. In questo caso, è necessario utilizzare la proprietà “Fogli” e quindi la relativa proprietà conteggio aggiuntiva.
Nel codice sopra, come dicevo, imposti book1, poi la proprietà sheet si riferisce a tutti i fogli, poi la proprietà count per contarli. E quando esegui questo codice ti mostra una finestra di messaggio con il risultato.
Utilizzo dell’istruzione “WITH” con la cartella di lavoro
In VBA esiste un’istruzione “With” che può aiutarti a lavorare con una cartella di lavoro mentre scrivi una macro in modo efficiente. Vediamo l’esempio qui sotto in cui hai tre diverse righe di codice con la stessa cartella di lavoro, ovvero ActiveWorkbook.
Con l’istruzione “WITH”, puoi fare riferimento alla cartella di lavoro attiva solo una volta e utilizzare tutte le proprietà e i metodi presenti nel codice.
- Innanzitutto, è necessario iniziare con l’istruzione iniziale “With ActiveWorkbook” e terminare l’istruzione con “End With”.
- Successivamente, devi scrivere il codice tra questa istruzione che hai nell’esempio sopra.
Come puoi vedere nel codice qui sopra, abbiamo fatto riferimento a quello di ActiveWorkbook utilizzando l’istruzione WITH e quindi dovrebbero essere utilizzate tutte le proprietà e i metodi.
Sub vba_activeworkbook_with_statement() With ActiveWorkbook .Sheets.Add Count:=5 .Charts.Visible = False .SaveAs ("C:UsersDellDesktopmyFolderbook2.xlsx") End With End Sub
Ti faccio un esempio semplice e concreto per farti capire tutto. Immagina di chiedermi di andare nella stanza 215 per prendere la bottiglia d’acqua, e quando torno mi mandi di nuovo nella stanza 215 per prendere una penna, poi mandami di nuovo a prendere un laptop. Ora il punto è questo: tutte le cose che mi hai detto di prendere sono nella stanza 215. Quindi è meglio se mi mandi nella stanza 215 e mi dici di prendere tutte e tre le cose in una volta.
Leggi: Con – Termina con
Dichiarare una variabile come cartella di lavoro
A volte è necessario dichiarare una variabile come raccoglitore per utilizzarla ulteriormente nel codice. Beh, non richiede niente di speciale da parte tua.
- Utilizzare l’istruzione DIM (dichiarazione).
- Scrivi il nome della variabile.
- Imposta il tipo di variabile su Cartella di lavoro.
Gestire gli errori
Quando si lavora con uno o più oggetti della cartella di lavoro in VBA, potrebbe essere necessario gestire anche gli errori. Prendiamo un esempio dell’errore “Errore di runtime 9: Indice fuori intervallo” . Questo errore può verificarsi per vari motivi.
- La cartella di lavoro a cui stai tentando di fare riferimento non è aperta.
- Forse hai scritto male il nome.
- La cartella di lavoro a cui ti riferisci non è ancora salvata e stai utilizzando l’estensione con quel nome.
- Se stai utilizzando il numero di indice per fare riferimento a una cartella di lavoro e il numero utilizzato è maggiore del numero totale di cartelle di lavoro aperte.