Analyst Cave

lis 24, 2021

ThisWorkbook odnosi się do skoroszytu, w którym wykonywany jest kod Excel VBA. Z drugiej strony, ActiveWorkbook odnosi się do skoroszytu Excela, który aktualnie ma fokus, czyli jest oknem Excela zwróconym do przodu.

Często programiści Excel VBA mieszają te dwa popularne typy skoroszytów w VBA. Problem zaczyna się pojawiać, gdy pracujesz w wielu skoroszytach Excela w tym samym czasie i przez przypadek uruchamiasz makro z jednego skoroszytu, podczas gdy inny skoroszyt Excela jest aktualnie aktywny. Może to mieć katastrofalne skutki w przypadku bezpośredniego korzystania z właściwości VBA Range lub VBA Cell.

W tym artykule wyjaśnię wyraźną różnicę między obiektami Excel VBA ActiveWorkbook i ThisWorkbook.

ActiveWorkbook

ActiveWorkbook nie jest tylko widocznym skoroszytem, jak wielu uważa, ponieważ równie dobrze można mieć otwartych wiele skoroszytów umieszczonych obok siebie. Jednak tylko jeden skoroszyt Excela jest uznawany za aktywny w dowolnym momencie. Aktywność jest cechą najwyższą – tylko skoroszyt, którego okno jest aktualnie zaznaczone, jest uważany za aktywny. Dokładna definicja znajduje się poniżej

Application.ActiveWorkbook lub ActiveWorkbook w Excel VBA:
Zwróci obiekt Workbook, który reprezentuje skoroszyt w aktywnym oknie (okno na górze). Właściwość nie zwróci niczego, jeśli aktywnym oknem jest okno Info lub okno Schowka.

Excel VBA ActiveWorkbook przykład

'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")

ThisWorkbook

Właściwość ThisWorkbook jest znacznie łatwiejsza do zrozumienia, ponieważ po prostu odwołuje się do skoroszytu Excela, w którym wykonywany jest kod VBA. Pełna definicja znajduje się poniżej:

Application.ThisWorkbook lub ThisWorkbook w Excel VBA:
Zwraca obiekt Workbook, który reprezentuje skoroszyt, w którym jest wykonywany bieżący kod makra VBA.

Excel VBA ThisWorkbook example

'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

Jeśli nadal nie wiesz, jaka jest różnica między tymi dwiema właściwościami, zobacz poniżej:

Po lewej stronie widoczny jest skoroszyt Excela, który jest najważniejszą aplikacją. W tym przypadku, jeśli uruchomisz makro w tym skoroszycie, właściwość ActiveWorkbook jest taka sama jak ThisWorkbook.

Po prawej stronie skoroszyt Excela nie jest widoczny lub nie jest najważniejszą aplikacją. W tym przypadku, jeśli uruchomisz makro w tym skoroszycie, właściwość ActiveWorkbook reprezentuje skoroszyt po lewej stronie, a ThisWorkbook reprezentuje skoroszyt po prawej stronie.

Mam nadzieję, że teraz wszystko jest jasne!

Wnioski

Teraz, gdy potrafisz rozróżnić obie te właściwości, ważne jest, aby pamiętać o kilku rzeczach:

  • Na co dzień używaj ThisWorkbook zamiast bardziej błędnego ActiveWorkbook, gdy oczekujesz, że twój kod będzie działał na tym samym Workbooku, na którym pracujesz
  • Używaj ActiveWorkbook ostrożnie, ponieważ jest to właściwość najwyższa, może nie zawsze zwracać właściwość, jeśli inne wyskakujące okna Excela będą zaangażowane. Chociaż właściwość ActiveWorkbook może być potrzebna podczas pracy z dodatkami do Excela (które wykonują kod na aktywnym skoroszycie, a nie na twoim dodatku)

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.