Mõeldes Exceli töövihikute automaatsele avamisele, mõelge, mis võib juhtuda, kui proovite avada juba avatud raamatut. Mitte-VBA maailmas proovib Excel faili uuesti avada, kuvades hoiatuse, et kõik salvestamata muudatused lähevad kaotsi. Sellise juhtumi eest saate kaitsta, kui kontrollite, kas antud fail on juba avatud, enne kui proovite seda uuesti avada.
Vältige seda hoiatusteadet.
Kuidas makro töötab
Selle makro puhul tuleb kõigepealt tähele panna, et see on funktsioon, mitte alamprotseduur. Nagu näete, võimaldab selle makro funktsiooniks muutmine anda sellele mis tahes failinime, et kontrollida, kas see fail on juba avatud.
Selle koodi põhisisu on lihtne. Testite antud failinime, et näha, kas seda saab määrata objektimuutujale. Objekti muutujale saab määrata ainult avatud töövihikuid. Kui proovite muutujale määrata suletud töövihiku, ilmneb tõrge.
Kui antud töövihikut saab määrata, on töövihik avatud; vea ilmnemisel töövihik suletakse.
Funktsioon FileIsOpenTest(TargetWorkbook As String) Booleanina
1. samm: deklareerige oma muutujad
Hämar testivihik töövihikuna
2. samm: öelge Excelile, et ta vea korral jätkaks
Vea korral Jätka järgmisena
3. samm: proovige määrata sihttöövihik TestBookile
Set TestBook = töövihikud (sihttöövihik)
4. samm: kui viga ei ilmnenud, on töövihik juba avatud
Kui Err.Number = 0 Siis
FileIsOpenTest = Tõene
Muidu
FileIsOpenTest = Väär
Lõpeta Kui
Lõpetamisfunktsioon
Esimese asjana deklareerib makro muutuja String, mis hoiab kasutaja valitud failinime. TestBook on teie String muutuja nimi.
2. sammus öelge Excelile, et selle koodi käitamisel võib esineda tõrge, ja tõrke korral jätkake koodi kasutamist. Ilma selle reata kood lihtsalt peatuks vea ilmnemisel. Jällegi testite antud failinime, et näha, kas seda saab määrata objektimuutujale. Kui antud töövihikut saab määrata, on see avatud; kui ilmneb tõrge, siis see suletakse.
3. sammus proovite määrata antud töövihiku muutujale TestBook Object. Töövihik, mida proovite määrata, on String muutuja nimega TargetWorkbook. TargetWorkbook edastatakse funktsioonile funktsiooni deklaratsioonides (vt koodi esimest rida). See struktuur välistab vajaduse töövihiku nime kõvasti kodeerida, võimaldades teil selle asemel muutujana edasi anda.
4. sammus kontrollite lihtsalt, kas ilmnes tõrge. Kui viga ei ilmnenud, on töövihik avatud, seega määrate FileIsOpenTesti väärtuseks Tõene. Kui ilmnes tõrge, ei ole töövihik avatud ja määrate FileIsOpenTesti väärtuseks False.
Jällegi saab seda funktsiooni kasutada mis tahes faili hindamiseks, mille te sellele TargetWorkbook argumendi kaudu edastate. See on makro funktsiooniks muutmise ilu.
Järgmine makro näitab, kuidas seda funktsiooni rakendada. Siin kutsute välja uue funktsiooni FileIsOpenTest, et veenduda, et kasutaja ei saa avada juba avatud faili:
Alammakro1()
1. samm: määrake stringi muutuja
Dim FName kui variant
Dim FNFileOnly As String
2. samm: GetOpenFilename meetod aktiveerib dialoogiboksi
FName = Application.GetOpenFilename(_
FileFilter:="Exceli töövihikud,*.xl*", _
Title:="Valige avamiseks töövihik", _
MultiSelect:=False)
3. samm: avage valitud fail, kui see pole veel avatud
Kui FName <> False, siis
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))