Articles

excel-vba Kiedy używać ActiveWorkbook i ThisWorkbook

Przykład

Najlepszą praktyką VBA jest określenie, do którego skoroszytu odnosi się kod VBA. Jeśli to określenie zostanie pominięte, wówczas VBA zakłada, że kod jest skierowany do aktualnie aktywnego skoroszytu (ActiveWorkbook).

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

Jednakże, gdy jednocześnie otwartych jest kilka skoroszytów – zwłaszcza, gdy kod VBA jest uruchamiany z dodatku do Excela – odwołania do ActiveWorkbook mogą być mylone lub błędnie kierowane. Na przykład dodatek z FROM-em, który sprawdza godzinę i porównuje ją z wartością przechowywaną na jednym z arkuszy dodatku (które zazwyczaj nie są widoczne dla użytkownika), będzie musiał wyraźnie określić, do którego skoroszytu się odwołuje. W naszym przykładzie otwarty (i aktywny) skoroszyt ma formułę w komórce A1 =EarlyOrLate() i NIE posiada żadnego VBA napisanego dla tego aktywnego skoroszytu. W naszym dodatku mamy następującą funkcję zdefiniowaną przez użytkownika (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

Kod dla UDF jest napisany i przechowywany w zainstalowanym dodatku do programu Excel. Wykorzystuje on dane przechowywane w arkuszu tego dodatku o nazwie „WatchTime”. Gdyby FROM użył ActiveWorkbook zamiast ThisWorkbook, to nigdy nie byłby w stanie zagwarantować, o który skoroszyt chodzi.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.