Ko razmišljate o samodejnem odpiranju Excelovih delovnih zvezkov, razmislite, kaj se lahko zgodi, če poskusite odpreti knjigo, ki je že odprta. V svetu, ki ni VBA, Excel poskuša znova odpreti datoteko, pri čemer se prikaže sporočilo, ki opozarja, da bodo vse neshranjene spremembe izgubljene. Pred takšnim pojavom se lahko zaščitite tako, da preverite, ali je določena datoteka že odprta, preden jo poskusite znova odpreti.
Izogibajte se temu opozorilnemu sporočilu.
Kako deluje makro
Prva stvar, ki jo morate opaziti pri tem makru, je, da je funkcija in ne podprocedura. Kot boste videli, če naredite ta makro kot funkcijo, lahko vanj posredujete poljubno ime datoteke, da preverite, ali je ta datoteka že odprta.
Bistvo te kode je preprosto. Preizkušate dano ime datoteke, da vidite, ali ga je mogoče dodeliti spremenljivki Object. Spremenljivki Objekt je mogoče dodeliti samo odprte delovne zvezke. Ko poskušate spremenljivki dodeliti zaprt delovni zvezek, pride do napake.
Če je danemu delovnemu zvezku mogoče dodeliti, je delovni zvezek odprt; če pride do napake, se delovni zvezek zapre.
Funkcija FileIsOpenTest(TargetWorkbook kot niz) kot Boolean
1. korak: Deklarirajte svoje spremenljivke
Dim TestBook kot delovni zvezek
2. korak: Povejte Excelu, naj se ob napaki nadaljuje
Ob napaki Nadaljuj naprej
'3. korak: poskusite dodeliti ciljni delovni zvezek TestBook
Nastavi testno knjigo = Delovni zvezki (TargetWorkbook)
4. korak: Če ni prišlo do napake, je delovni zvezek že odprt
Če je Err.Number = 0 Potem
FileIsOpenTest = Res
Drugače
FileIsOpenTest = False
Konec Če
Končna funkcija
Prva stvar, ki jo naredi makro, je, da razglasi spremenljivko String, ki bo vsebovala ime datoteke, ki ga izbere uporabnik. TestBook je ime vaše spremenljivke String.
V 2. koraku poveste Excelu, da je morda prišlo do napake pri izvajanju te kode, in v primeru napake nadaljujte s kodo. Brez te vrstice bi se koda preprosto ustavila, ko pride do napake. Ponovno preizkusite dano ime datoteke, da vidite, ali ga je mogoče dodeliti spremenljivki Object. Če je danemu delovnemu zvezku mogoče dodeliti, je odprt; če pride do napake, se zapre.
V 3. koraku poskušate dati delovni zvezek dodeliti spremenljivki TestBook Object. Delovni zvezek, ki ga poskušate dodeliti, je spremenljivka String, imenovana TargetWorkbook. TargetWorkbook se posreduje funkciji v deklaracijah funkcije (glejte prvo vrstico kode). Ta struktura odpravlja potrebo po trdem kodiranju imena delovnega zvezka, kar vam omogoča, da ga namesto tega posredujete kot spremenljivko.
V 4. koraku preprosto preverite, ali je prišlo do napake. Če do napake ni prišlo, je delovni zvezek odprt, zato nastavite FileIsOpenTest na True. Če je prišlo do napake, delovni zvezek ni odprt in ste nastavili FileIsOpenTest na False.
Ponovno lahko to funkcijo uporabite za oceno katere koli datoteke, ki ji jo posredujete, prek njenega argumenta TargetWorkbook. To je lepota postavitve makra v funkcijo.
Naslednji makro prikazuje, kako izvesti to funkcijo. Tukaj pokličete novo funkcijo FileIsOpenTest, da zagotovite, da uporabnik ne more odpreti že odprte datoteke:
Podmakro1()
1. korak: Definirajte spremenljivko niza
Dim FName kot različica
Dim FNFileOnly kot niz
2. korak: Metoda GetOpenFilename aktivira pogovorno okno
FName = Application.GetOpenFilename( _
FileFilter:="Excel Workbooks,*.xl*", _
Title:="Izberite delovni zvezek za odpiranje", _
MultiSelect:=False)
3. korak: Odprite izbrano datoteko, če še ni odprta
Če FName <> False Potem
FNFileOnly = StrReverse(Levo(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))