Domājot par automātisku Excel darbgrāmatu atvēršanu, apsveriet, kas var notikt, ja mēģināt atvērt jau atvērtu grāmatu. Pasaulē, kas nav VBA, programma Excel mēģina vēlreiz atvērt failu, parādot brīdinājuma ziņojumu, ka visas nesaglabātās izmaiņas tiks zaudētas. Varat aizsargāties pret šādu gadījumu, pārbaudot, vai dotais fails jau ir atvērts, pirms mēģināt to atvērt vēlreiz.
Izvairieties no šī brīdinājuma ziņojuma.
Kā darbojas makro
Pirmā lieta, kas jāpamana saistībā ar šo makro, ir tā, ka tā ir funkcija, nevis apakšprocedūra. Kā redzēsit, padarot šo makro par funkciju, varat tam nodot jebkuru faila nosaukumu, lai pārbaudītu, vai fails jau ir atvērts.
Šī koda būtība ir vienkārša. Jūs pārbaudāt doto faila nosaukumu, lai noskaidrotu, vai to var piešķirt objekta mainīgajam. Objekta mainīgajam var piešķirt tikai atvērtas darbgrāmatas. Mēģinot mainīgajam piešķirt slēgtu darbgrāmatu, rodas kļūda.
Ja doto darbgrāmatu var piešķirt, darbgrāmata ir atvērta; ja rodas kļūda, darbgrāmata tiek aizvērta.
Funkcija FileIsOpenTest(TargetWorkbook As String) Kā Būla
1. darbība: deklarējiet savus mainīgos
Dim TestBook kā darbgrāmata
2. darbība. Pastāstiet Excel atsākt kļūdas gadījumā
Kļūdas gadījumā atsākt nākamo
3. darbība. Mēģiniet piešķirt mērķa darbgrāmatu TestBook
Set TestBook = darbgrāmatas (mērķa darbgrāmata)
4. darbība. Ja kļūda nav radusies, darbgrāmata jau ir atvērta
Ja Err.Number = 0 Tad
FileIsOpenTest = Patiess
Citādi
FileIsOpenTest = False
Beigas Ja
Beigu funkcija
Pirmā lieta, ko makro dara, ir deklarēt virknes mainīgo, kurā būs lietotāja izvēlētais faila nosaukums. TestBook ir jūsu virknes mainīgā nosaukums.
2. darbībā jūs sakāt programmai Excel, ka, iespējams, radusies kļūda, palaižot šo kodu, un kļūdas gadījumā atsākt koda darbību. Bez šīs rindas kods vienkārši apstāsies, kad rodas kļūda. Atkal, jūs pārbaudāt doto faila nosaukumu, lai redzētu, vai to var piešķirt objekta mainīgajam. Ja doto darbgrāmatu var piešķirt, tā ir atvērta; ja rodas kļūda, tas tiek aizvērts.
3. darbībā jūs mēģināt piešķirt doto darbgrāmatu mainīgajam TestBook Object. Darbgrāmata, kuru mēģināt piešķirt, ir virknes mainīgais ar nosaukumu TargetWorkbook. TargetWorkbook tiek nodota funkcijai funkciju deklarācijās (skatiet koda pirmo rindiņu). Šī struktūra novērš nepieciešamību stingri kodēt darbgrāmatas nosaukumu, ļaujot to nodot kā mainīgo.
4. darbībā vienkārši pārbaudiet, vai nav radusies kļūda. Ja kļūda nav radusies, darbgrāmata ir atvērta, tāpēc FileIsOpenTest iestatāt uz True. Ja radās kļūda, darbgrāmata nav atvērta, un jūs iestatāt FileIsOpenTest uz False.
Arī šo funkciju var izmantot, lai novērtētu jebkuru failu, ko tai nosūtāt, izmantojot tā TargetWorkbook argumentu. Tas ir makro iekļaušanas funkcijā skaistums.
Šis makro parāda, kā ieviest šo funkciju. Šeit jūs izsaucat jauno funkciju FileIsOpenTest, lai pārliecinātos, ka lietotājs nevar atvērt jau atvērtu failu:
Apakšmakro1()
1. darbība: definējiet virknes mainīgo
Dim FName kā variants
Dim FNFileOnly As String
2. darbība. GetOpenFilename metode aktivizē dialoglodziņu
FName = Application.GetOpenFilename(_
FileFilter:="Excel darbgrāmatas,*.xl*", _
Title:="Izvēlieties atvērtai darbgrāmatu", _
MultiSelect:=False)
3. darbība. Atveriet izvēlēto failu, ja tas vēl nav atvērts
Ja FName <> False, tad
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(Str(StrReverse(FName), ") - 1))