ThisWorkbook se referă la registrul de lucru în care se execută codul VBA Excel. ActiveWorkbook, pe de altă parte, se referă la caietul de lucru Excel care are în mod curent focus, adică este fereastra Excel din față.
De multe ori dezvoltatorii Excel VBA amestecă aceste două tipuri comune de registre de lucru în VBA. Problema începe să apară atunci când lucrați în mai multe caiete de lucru Excel în același timp și, din greșeală, executați un macro dintr-un caiet de lucru în timp ce un alt caiet de lucru Excel este activ în prezent. Acest lucru poate avea efecte dezastruoase dacă utilizați direct proprietățile VBA Range sau VBA Cell.
În acest articol permiteți-mi să explic diferența distinctă dintre obiectele Excel VBA ActiveWorkbook și ThisWorkbook.
ActiveWorkbook
Cartea de lucru activă nu este doar cartea de lucru vizibilă, așa cum mulți ar crede, deoarece puteți la fel de bine să aveți mai multe cărți de lucru deschise și plasate una lângă alta. Cu toate acestea, doar un singur registru de lucru Excel este considerat activ în orice moment. Fiind activă este o proprietate de vârf – numai registrul de lucru a cărui fereastră este selectată în acel moment este considerat activ. A se vedea mai jos pentru o definiție precisă
Va returna obiectul Workbook care reprezintă registrul de lucru din fereastra activă (fereastra de sus). Proprietatea va returna Nothing dacă fereastra Info sau fereastra Clipboard este fereastra activă.
Excel VBA ActiveWorkbook exemplu
'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")
ThisWorkbook
Proprietatea ThisWorkbook este mult mai ușor de înțeles, deoarece face pur și simplu referire la registrul de lucru Excel în care se execută codul VBA. Pentru definiția completă, a se vedea mai jos:
Va returna obiectul Workbook care reprezintă registrul de lucru în care se execută codul macro VBA curent.
Excel VBA ThisWorkbook exemplu
'Returns the name of the Workbook which is executing this MacroDebug.Print ActiveWorkbook.Name'Get Sheet1 from the Workbook executing this MacroActiveWorkbook.Sheets("Sheet1")
ActiveWorkbook vs ThisWorkbook
Dacă sunteți încă confuz cu privire la diferența dintre aceste două proprietăți, vedeți mai jos:
În stânga, Excel Workbook este vizibil și reprezintă aplicația principală. În acest caz, dacă executați un macro în acest registru de lucru, proprietatea ActiveWorkbook este aceeași cu ThisWorkbook.
În dreapta, Excel Workbook nu este vizibil sau nu este cea mai importantă aplicație. În acest caz, dacă executați un macro în acest registru de lucru, proprietatea ActiveWorkbook reprezintă registrul de lucru din stânga, iar ThisWorkbook reprezintă registrul de lucru din dreapta.
Sperăm că este clar acum!
Concluzii
Acum că puteți distinge între aceste două proprietăți este important să țineți cont de câteva lucruri:
- În mod curent folosiți ThisWorkbook în locul mai eronatei ActiveWorkbook, atunci când vă așteptați ca codul dvs. să ruleze pe același registru de lucru pe care lucrați
- Folosiți ActiveWorkbook cu atenție, deoarece fiind o proprietate situată în partea de sus, s-ar putea să nu returneze întotdeauna o proprietate dacă vor fi implicate alte ferestre pop-up Excel. Deși este posibil să aveți nevoie de proprietatea ActiveWorkbook atunci când lucrați cu Excel AddIns (care execută codul pe Active Workbook, nu pe AddIn-ul dumneavoastră)
.