Il blocco With - End With in VBA è usato per dire a VBA che useremo l'oggetto dato e dovrebbe considerare le proprietà dell'oggetto dato solo una volta che usiamo l'operatore punto. Vedremo esempi più avanti in questo articolo.
Sintassi con - Fine con blocco
Con [Oggetto] 'Codice da modificare o utilizzare [Oggetto] '-- '-- Termina con
Quindi ora che conosciamo la sintassi del blocco With - End With, vediamo il suo utilizzo.
Esempio di With - End With Block
Diciamo che voglio apportare diverse modifiche all'intervallo A2: A10. Voglio selezionare questo intervallo, cambiarne i colori di riempimento, lo stile del carattere, ecc. Come lo farei in generale? Probabilmente così:
Sub test() Range("A1:A10").Select Range("A1:A10").Interior.ColorIndex = 8 Range("A1:A10").Font.Name = "Algerian" Range("A1:A10 ").Font.ColorIndex = 12 Range("A1:A10").Font.Underline = xlUnderlineStyleDouble Range("A1:A10").Copy Range("B1:B10") Range("A1:A10").Cancella Fine sottotitolo
Quanto sopra seleziona l'intervallo A1: A10. Cambia il colore interno dell'intervallo in indice colore 8. Cambia il carattere in algerino. Cambia il colore del carattere in indice colore 12. Sottolinea il testo nell'intervallo con doppie sottolineature. Quindi copia l'intervallo A1: A10 nell'intervallo B1: B10 dello stesso foglio. Alla fine cancella l'intervallo A1:A10.
Puoi notare che per fare ogni operazione con il range A1:A10, dobbiamo scriverlo ogni volta. Quindi l'operatore punto accede alle sue proprietà. Ciò riduce la velocità di elaborazione e aumenta il sovraccarico di lavoro per i programmatori VBA. L'alternativa per farlo è usare un blocco With: il codice seguente fa lo stesso del codice precedente ma più velocemente.
Sub test() With Range("A1:A10") .Select .Interior.ColorIndex = 8 .Font.Name = "Algerian" .Font.ColorIndex = 12 .Font.Underline = xlUnderlineStyleDouble .Copy Range("B1:B10" ) .Cancella Fine con End Sub
Vediamo un altro esempio.
Se hai creato un oggetto di Outlook Mail, puoi utilizzare quell'oggetto per inizializzare tutte le sue proprietà e utilizzare i metodi.
Imposta outMail = Outlook.Application.CreateItem(0) Con outMail .To = "abcd.mail.com" 'Obbligatorio. Qui definisci l'id della posta di destinazione… cc = "cc.mail.com" 'opzionale. Cc mail id se vuoi… BCC = "bcc.mail.com" 'opzionale. Ccn mail id se vuoi… Oggetto = subj 'dovrebbe avere. Il massaggio su mail body… Body = msg' opzionale. Il massaggio sul corpo della posta… Allegati.Aggiungi "C:/exceltip.com\test.xlsx" .Invia Fine con
Come funziona?
Bene, quando scriviamo With Range("A1:A10"), vba blocca il suo riferimento all'oggetto range("A1:A10"). Quindi, ogni volta che scriviamo l'operatore punto (.), VBA elenca tutti i membri di questa classe di intervallo che influenzerà solo l'oggetto Range ("A1: A10") o qualsiasi oggetto che hai menzionato. Il blocco dei riferimenti viene rilasciato quando VBA legge l'istruzione End With.
Annidato con blocchi
Possiamo avere un blocco all'interno di un altro blocco. Nell'esempio sopra abbiamo usato un oggetto intervallo per selezionarlo. Quindi abbiamo usato Range.Font diverse volte per lavorare con i caratteri. Questo è di nuovo ripetitivo. Il codice sopra può essere scritto anche in questo modo:
Sub test() With Range("A1:A10") .Select .Interior.ColorIndex = 8 'Usando un altro With all'interno di un With Block With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With .Copy Intervallo ("B1: B10") .Cancella Fine con End Sub
Il blocco con interno dovrebbe fare riferimento a un oggetto che è un membro secondario dell'oggetto esterno. Possiamo riferirci all'esterno con come oggetto con e all'interno con come Bambino con. Quando inizi inner con, l'oggetto dovrebbe essere scritto con l'operatore punto precedente.
Una volta che sei un bambino, non puoi accedere alle proprietà specifiche dei genitori. Ad esempio, il codice seguente è sbagliato.
Sub test() With Range("A1:A10") .Select .Interior.ColorIndex = 8 'Utilizzo di un altro With all'interno di un With Block With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble 'Il codice seguente genererà un errore poiché i metodi di copia e cancellazione non appartengono alla classe dei caratteri… Copy Range ("B1: B10") .Clear End With End With End Sub
Completamente qualificato con blocco
Se voglio apportare alcune modifiche con il carattere dell'intervallo A1: A10 di sheet2 nel codice contenente la cartella di lavoro, dovremmo utilizzare un blocco completo.
I seguenti due codici funzioneranno allo stesso modo.
Sub test2() Con ThisWorkbook With .Sheets("Sheet2") With .Range("A1:A10") With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With End With End With End Sub
'Completamente qualificato con blocco Sub test3() With ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With End Sub
Puoi vedere la differenza. Quindi, quando sai che utilizzerai più metodi e proprietà da un oggetto, assegna un nome completo all'inizio. Se utilizzerai oggetti figlio, usa l'approccio precedente. I programmatori esperti utilizzano entrambi i metodi in situazioni adatte.
Quindi sì ragazzi, è così che usiamo il blocco With - End With in VBA. Spero di essere stato abbastanza esplicativo e che questo articolo ti abbia aiutato a capire il concetto di With - End With. Se hai dubbi su questo articolo o su qualsiasi altro argomento, chiedimi nella sezione commenti qui sotto. Sarò felice di aiutarti.
Variabili VBA in Excel| VBA sta per Visual Basic for Applications. È un linguaggio di programmazione di Microsoft. Viene utilizzato con applicazioni Microsoft Office come MSExcel, MS-Word e MS-Access mentre le variabili VBA sono parole chiave specifiche.
Ambito variabile VBA di Excel| In tutti i linguaggi di programmazione, abbiamo identificatori di accesso alle variabili che definiscono da dove è possibile accedere a una variabile definita. Excel VBA non fa eccezione. Anche VBA ha identificatori di ambito.
Argomenti ByRef e ByVal | Quando un argomento viene passato come argomento ByRef a una sub o funzione diversa, viene inviato il riferimento della variabile effettiva. Qualsiasi modifica apportata alla copia della variabile si rifletterà nell'argomento originale.
Elimina i fogli senza richieste di conferma utilizzando VBA in Microsoft Excel | Poiché stai eliminando i fogli utilizzando VBA, sai cosa stai facendo. Vorresti dire a Excel di non mostrare questo avviso ed eliminare il dannato foglio.
Aggiungi e salva una nuova cartella di lavoro utilizzando VBA in Microsoft Excel 2016| In questo codice, abbiamo prima creato un riferimento a un oggetto cartella di lavoro. E poi lo abbiamo inizializzato con un nuovo oggetto cartella di lavoro. Il vantaggio di questo approccio è che puoi eseguire facilmente le operazioni su questa nuova cartella di lavoro. Come salvare, chiudere, eliminare, ecc
Visualizza un messaggio sulla barra di stato VBA di Excel| La barra di stato in Excel può essere utilizzata come monitor del codice. Quando il tuo codice VBA è lungo e svolgi diverse attività utilizzando VBA, spesso disabiliti l'aggiornamento dello schermo in modo da non vedere lo sfarfallio dello schermo.
Disattiva i messaggi di avviso utilizzando VBA in Microsoft Excel 2016| Questo codice non solo disabilita gli avvisi VBA, ma aumenta anche l'efficienza temporale del codice. Vediamo come.
Articoli popolari:
50 scorciatoie di Excel per aumentare la produttività | Diventa più veloce nel tuo compito. Queste 50 scorciatoie ti faranno lavorare ancora più velocemente su Excel.
La funzione CERCA.VERT in Excel | Questa è una delle funzioni più utilizzate e popolari di Excel che viene utilizzata per cercare il valore da diversi intervalli e fogli.
CONTA.SE in Excel 2016 | Conta i valori con le condizioni usando questa fantastica funzione. Non è necessario filtrare i dati per contare valori specifici. La funzione Countif è essenziale per preparare la tua dashboard.
Come utilizzare la funzione SOMMA.SE in Excel | Questa è un'altra funzione essenziale della dashboard. Questo ti aiuta a riassumere i valori su condizioni specifiche.