Articles

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.

Jätä vastaus

Sähköpostiosoitettasi ei julkaista.