Dok razmišljate o automatskom otvaranju Excel radnih knjiga, razmislite što bi se moglo dogoditi ako pokušate otvoriti knjigu koja je već otvorena. U svijetu koji nije VBA, Excel pokušava ponovno otvoriti datoteku, a prikazana poruka upozorava da će sve nespremljene promjene biti izgubljene. Možete se zaštititi od takve pojave tako da provjerite je li određena datoteka već otvorena prije nego što je pokušate ponovno otvoriti.
Izbjegavajte ovu poruku upozorenja.
Kako makro funkcionira
Prva stvar koju treba primijetiti kod ove makronaredbe je da je to funkcija, a ne podprocedura. Kao što ćete vidjeti, pretvaranje ove makronaredbe u funkciju omogućuje vam da joj proslijedite bilo koji naziv datoteke kako biste provjerili je li ta datoteka već otvorena.
Bit ovog koda je jednostavna. Testirate zadani naziv datoteke da vidite može li se dodijeliti varijabli objekta. Samo otvorene radne knjige mogu se dodijeliti varijabli Objekta. Kada pokušate dodijeliti zatvorenu radnu knjigu varijabli, pojavljuje se pogreška.
Ako se zadana radna knjižica može dodijeliti, radna je knjižica otvorena; ako dođe do greške, radna knjiga se zatvara.
Funkcija FileIsOpenTest(TargetWorkbook kao string) kao Boolean
'Korak 1: Deklarirajte svoje varijable
Dim TestBook kao radna bilježnica
'Korak 2: recite Excelu da se nastavi u slučaju pogreške
U slučaju pogreške Nastavi dalje
'Korak 3: Pokušajte dodijeliti ciljnu radnu knjigu TestBook
Postavi TestBook = Radne knjige (TargetWorkbook)
'Korak 4: Ako nije došlo do greške, radna knjiga je već otvorena
Ako je Err.Broj = 0 Tada
FileIsOpenTest = Istina
Drugo
FileIsOpenTest = Netočno
Završi ako
Završna funkcija
Prva stvar koju makronaredba čini je da deklarira varijablu String koja će sadržavati naziv datoteke koji korisnik odabere. TestBook je naziv vaše varijable String.
U 2. koraku kažete Excelu da može doći do pogreške pri pokretanju ovog koda i, u slučaju pogreške, nastavite s kodom. Bez ove linije, kod bi se jednostavno zaustavio kada se pojavi greška. Opet testirate zadani naziv datoteke da vidite može li se dodijeliti varijabli objekta. Ako se data radna knjiga može dodijeliti, ona je otvorena; ako dođe do pogreške, zatvara se.
U 3. koraku pokušavate dodijeliti danu radnu knjigu varijabli TestBook Object. Radna knjiga koju pokušavate dodijeliti je varijabla String koja se zove TargetWorkbook. TargetWorkbook se prosljeđuje funkciji u deklaracijama funkcije (pogledajte prvi redak koda). Ova struktura eliminira potrebu za tvrdim kodiranjem naziva radne knjige, omogućujući vam da ga umjesto toga proslijedite kao varijablu.
U 4. koraku jednostavno provjerite je li došlo do pogreške. Ako se pogreška nije dogodila, radna knjiga je otvorena, pa ste FileIsOpenTest postavili na True. Ako je došlo do pogreške, radna knjiga nije otvorena i postavite FileIsOpenTest na False.
Opet, ova se funkcija može koristiti za procjenu bilo koje datoteke koju joj proslijedite, putem argumenta TargetWorkbook. Ovo je ljepota stavljanja makronaredbe u funkciju.
Sljedeći makro pokazuje kako implementirati ovu funkciju. Ovdje pozivate novu funkciju FileIsOpenTest kako biste bili sigurni da korisnik ne može otvoriti već otvorenu datoteku:
Podmakro1()
'Korak 1: Definirajte varijablu niza
Dim FName kao varijanta
Dim FNFileOnly kao niz
'Korak 2: GetOpenFilename metoda aktivira dijaloški okvir
FName = Application.GetOpenFilename( _
FileFilter:="Excel Workbooks,*.xl*", _
Title:="Odaberite radnu knjigu za otvaranje", _
MultiSelect:=False)
'Korak 3: Otvorite odabranu datoteku ako već nije otvorena
Ako FName <> False Onda
FNFileOnly = StrReverse(Lijevo(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))