Kai galvojate apie automatinį „Excel“ darbaknygių atidarymą, pagalvokite, kas gali nutikti, jei bandysite atidaryti jau atidarytą knygą. Ne VBA pasaulyje „Excel“ bando dar kartą atidaryti failą ir rodomas pranešimas, įspėjantis, kad visi neišsaugoti pakeitimai bus prarasti. Galite apsisaugoti nuo tokio įvykio patikrinę, ar tam tikras failas jau atidarytas, prieš bandydami jį atidaryti dar kartą.
Venkite šio įspėjimo pranešimo.
Kaip veikia makrokomandas
Pirmiausia reikia pastebėti šią makrokomandą, kad tai yra funkcija, o ne antrinė procedūra. Kaip matysite, šią makrokomandą padarę funkcija, galėsite jai perduoti bet kokį failo pavadinimą, kad patikrintumėte, ar tas failas jau atidarytas.
Šio kodo esmė paprasta. Bandote duotą failo pavadinimą, kad sužinotumėte, ar jį galima priskirti objekto kintamajam. Objekto kintamajam gali būti priskirtos tik atidarytos darbaknygos. Kai bandote priskirti uždarą darbaknygę kintamajam, įvyksta klaida.
Jei duotą darbaknygę galima priskirti, darbaknygė atidaryta; jei įvyksta klaida, darbaknygė uždaroma.
Funkcija FileIsOpenTest(TargetWorkbook As String) Kaip Būlio reikšmė
1 veiksmas: deklaruokite savo kintamuosius
Pritemdyta testo knyga kaip darbo knyga
„2 veiksmas: nurodykite „Excel“ tęsti, jei įvyko klaida
Įvykus klaidai, tęskite toliau
3 veiksmas: pabandykite priskirti tikslinę darbaknygę „TestBook“.
Nustatyti testo knygą = darbaknygės (tikslinė darbo knyga)
4 veiksmas: jei klaida neįvyko, darbaknygė jau atidaryta
Jei Err.Number = 0 Tada
FileIsOpenTest = Tiesa
Kitas
FileIsOpenTest = Netiesa
Pabaiga, jei
Pabaigos funkcija
Pirmas dalykas, kurį atlieka makrokomandos, yra paskelbti eilutės kintamąjį, kuriame bus vartotojo pasirinktas failo pavadinimas. TestBook yra jūsų eilutės kintamojo pavadinimas.
Atlikdami 2 veiksmą, pranešate programai Excel, kad paleidžiant šį kodą gali būti klaida, o klaidos atveju atnaujinkite kodą. Be šios eilutės kodas tiesiog sustotų, kai įvyktų klaida. Vėlgi, jūs patikrinate nurodytą failo pavadinimą, kad sužinotumėte, ar jį galima priskirti objekto kintamajam. Jei duotą darbaknygę galima priskirti, ji atidaryta; jei įvyksta klaida, jis uždaromas.
3 veiksme bandote priskirti nurodytą darbaknygę TestBook Object kintamajam. Darbaknygė, kurią bandote priskirti, yra eilutės kintamasis, vadinamas TargetWorkbook. „TargetWorkbook“ perduodama funkcijai funkcijų deklaracijose (žr. pirmąją kodo eilutę). Ši struktūra pašalina poreikį koduoti darbaknygės pavadinimą, todėl galite perduoti jį kaip kintamąjį.
4 veiksme tiesiog patikrinkite, ar neįvyko klaida. Jei klaida neįvyko, darbaknygė atidaryta, todėl FileIsOpenTest nustatote kaip True. Jei įvyko klaida, darbaknygė neatidaryta ir jūs nustatote FileIsOpenTest į False.
Vėlgi, šią funkciją galima naudoti bet kuriam failui, kurį jai perduodate, įvertinti naudojant TargetWorkbook argumentą. Tai yra makrokomandos panaudojimo funkcija grožis.
Šioje makrokomandoje parodyta, kaip įgyvendinti šią funkciją. Čia iškviečiate naują funkciją FileIsOpenTest, kad įsitikintumėte, jog vartotojas negali atidaryti jau atidaryto failo:
Sub-makro1()
„1 veiksmas: apibrėžkite eilutės kintamąjį
Dim FName kaip variantas
Pritemdyti FNFileOnly kaip eilutę
2 veiksmas: „GetOpenFilename Method“ suaktyvina dialogo langą
FName = Application.GetOpenFilename(_
FileFilter:="Excel Workbooks,*.xl*", _
Title:="Pasirinkite atidaryti darbaknygę", _
MultiSelect:=False)
„3 veiksmas: atidarykite pasirinktą failą, jei jis dar nebuvo atidarytas
Jei FName <> False Tada
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))