Kun ajattelet Excel-työkirjojen automaattista avaamista, mieti, mitä voi tapahtua, jos yrität avata jo auki olevan kirjan. Muissa kuin VBA-maailmassa Excel yrittää avata tiedoston uudelleen ja varoittaa, että tallentamattomat muutokset katoavat. Voit suojautua tällaiselta tapahtumalta tarkistamalla, onko tietty tiedosto jo auki, ennen kuin yrität avata sen uudelleen.
Vältä tätä varoitusviestiä.
Kuinka makro toimii
Ensimmäinen asia, joka tulee huomata tässä makrossa, on, että se on funktio, ei alitoiminto. Kuten näet, tämän makron tekeminen funktioksi antaa sinun välittää sille minkä tahansa tiedostonimen ja testata, onko tiedosto jo auki.
Tämän koodin ydin on yksinkertainen. Testaat annettua tiedostonimeä nähdäksesi, voidaanko se määrittää objektimuuttujalle. Vain avatut työkirjat voidaan määrittää objektimuuttujaan. Kun yrität määrittää muuttujalle suljetun työkirjan, tapahtuu virhe.
Jos annettu työkirja voidaan määrittää, työkirja on auki; jos tapahtuu virhe, työkirja suljetaan.
Funktio FileIsOpenTest(TargetWorkbook As String) Boolen funktiona
'Vaihe 1: Ilmoita muuttujasi
Himmeä testikirja työkirjana
Vaihe 2: Pyydä Exceliä jatkamaan virheen sattuessa
Virheestä Jatka seuraavaksi
'Vaihe 3: Yritä määrittää kohdetyökirja TestBookille
Aseta testikirja = työkirjat (TargetWorkbook)
'Vaihe 4: Jos virhettä ei tapahtunut, työkirja on jo auki
Jos Err.Number = 0 Sitten
FileIsOpenTest = Tosi
Muu
FileIsOpenTest = Epätosi
Loppu Jos
Lopeta toiminto
Ensimmäinen asia, jonka makro tekee, on ilmoittaa merkkijonomuuttuja, joka sisältää käyttäjän valitseman tiedostonimen. TestBook on merkkijonomuuttujasi nimi.
Vaiheessa 2 kerrot Excelille, että tämän koodin suorittamisessa saattaa tapahtua virhe, ja jatka koodin suorittamista virheen sattuessa. Ilman tätä riviä koodi yksinkertaisesti pysähtyisi virheen tapahtuessa. Jälleen testaat annettua tiedostonimeä nähdäksesi, voidaanko se määrittää objektimuuttujalle. Jos annettu työkirja voidaan määrittää, se on auki; jos tapahtuu virhe, se suljetaan.
Vaiheessa 3 yrität määrittää annetun työkirjan TestBook Object -muuttujalle. Työkirja, jonka yrität määrittää, on merkkijonomuuttuja nimeltä TargetWorkbook. TargetWorkbook välitetään funktiolle funktiomäärittelyissä (katso koodin ensimmäinen rivi). Tämä rakenne poistaa tarpeen koodata työkirjan nimeä, joten voit välittää sen muuttujana sen sijaan.
Vaiheessa 4 tarkistat vain, onko tapahtunut virhe. Jos virhettä ei ilmennyt, työkirja on auki, joten asetat FileIsOpenTest-asetukseksi True. Jos tapahtui virhe, työkirja ei ole auki ja asetat FileIsOpenTest-asetukseksi False.
Jälleen tätä funktiota voidaan käyttää arvioimaan mitä tahansa tiedostoa, jonka annat sille TargetWorkbook-argumentin kautta. Tämä on makron funktioksi asettamisen kauneus.
Seuraava makro näyttää, kuinka tämä toiminto toteutetaan. Tässä kutsut uutta FileIsOpenTest-funktiota varmistaaksesi, että käyttäjä ei voi avata jo avattua tiedostoa:
Alamakro1()
'Vaihe 1: Määritä merkkijonomuuttuja
Dim FName Varianttina
Dim FNFileOnly As String
Vaihe 2: GetOpenFilename Method aktivoi valintaikkunan
FName = Application.GetOpenFilename(_
FileFilter:="Excel-työkirjat,*.xl*", _
Title:="Valitse avattava työkirja", _
MultiSelect:=False)
'Vaihe 3: Avaa valittu tiedosto, jos sitä ei ole jo avattu
Jos FName <> False Sitten
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))