excel-vba Milloin käytetään ActiveWorkbookia ja ThisWorkbookia
esimerkki
VBA:n parhaana käytäntönä on aina määrittää, mihin työkirjaan VBA-koodi viittaa. Jos tämä määrittely jätetään pois, VBA olettaa, että koodi kohdistuu tällä hetkellä aktiiviseen työkirjaan (ActiveWorkbook
).
'--- the currently active workbook (and worksheet) is impliedRange("A1").value = 3.1415Cells(1, 1).value = 3.1415
Viittaukset ActiveWorkbook
saattavat kuitenkin sekoittua tai ohjautua väärin, kun useita työkirjoja on avoinna samaan aikaan — erityisesti ja erityisesti silloin, kun VBA-koodi suoritetaan Excel-lisäosasta — viittaukset ActiveWorkbook
:een. Esimerkiksi add-in, jossa on UDF, joka tarkistaa kellonajan ja vertaa sitä arvoon, joka on tallennettu jollekin add-inin laskentataulukoista (jotka eivät yleensä ole helposti käyttäjän nähtävissä), joutuu tunnistamaan nimenomaisesti, mihin työkirjaan viitataan. Esimerkissämme avoimessa (ja aktiivisessa) työkirjassa on kaava solussa A1 =EarlyOrLate()
, eikä siinä ole mitään VBA:ta, joka on kirjoitettu kyseiseen aktiiviseen työkirjaan. Lisäohjelmassamme on seuraava 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
UDF:n koodi on kirjoitettu ja tallennettu asennettuun Excel-lisäohjelmaan. Se käyttää tietoja, jotka on tallennettu lisäosan työarkille nimeltä ”WatchTime”. Jos UDF olisi käyttänyt ActiveWorkbook
eikä ThisWorkbook
, se ei voisi koskaan taata, mikä työkirja on tarkoitettu.