Articles

excel-vba Quando usare ActiveWorkbook e ThisWorkbook

Esempio

È una Best Practice di VBA specificare sempre a quale cartella di lavoro si riferisce il codice VBA. Se questa specificazione viene omessa, allora VBA assume che il codice sia diretto alla cartella di lavoro attualmente attiva (ActiveWorkbook).

'--- the currently active workbook (and worksheet) is impliedRange("A1").value = 3.1415Cells(1, 1).value = 3.1415

Tuttavia, quando diverse cartelle di lavoro sono aperte allo stesso tempo — in particolare e soprattutto quando il codice VBA viene eseguito da un Excel Add-In — i riferimenti alla ActiveWorkbook possono essere confusi o mal indirizzati. Per esempio, un add-in con una UDF che controlla l’ora del giorno e la confronta con un valore memorizzato in uno dei fogli di lavoro dell’add-in (che tipicamente non sono immediatamente visibili all’utente) dovrà identificare esplicitamente a quale cartella di lavoro si sta facendo riferimento. Nel nostro esempio, la nostra cartella di lavoro aperta (e attiva) ha una formula nella cella A1 =EarlyOrLate() e NON ha alcun VBA scritto per quella cartella di lavoro attiva. Nel nostro add-in, abbiamo la seguente User Defined Function (UDF):

Public Function EarlyOrLate() As String If Hour(Now) > ThisWorkbook.Sheets("WatchTime").Range("A1") Then EarlyOrLate = "It's Late!" Else EarlyOrLate = "It's Early!" End IfEnd Function

Il codice per la UDF è scritto e memorizzato nell’add-in Excel installato. Utilizza i dati memorizzati su un foglio di lavoro nell’add-in chiamato “WatchTime”. Se l’UDF avesse usato ActiveWorkbook invece di ThisWorkbook, allora non sarebbe mai stato in grado di garantire a quale cartella di lavoro era destinato.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato.