Mens du overvejer automatisk at åbne Excel-projektmapper, skal du overveje, hvad der kan ske, hvis du forsøger at åbne en bog, der allerede er åben. I ikke-VBA-verdenen forsøger Excel at åbne filen igen, med den viste meddelelse, der advarer om, at eventuelle ikke-gemte ændringer vil gå tabt. Du kan beskytte dig mod en sådan hændelse ved at kontrollere, om en given fil allerede er åben, før du prøver at åbne den igen.
Undgå denne advarselsmeddelelse.
Sådan fungerer makroen
Den første ting at bemærke ved denne makro er, at det er en funktion, ikke en underprocedure. Som du vil se, gør det at gøre denne makro til en funktion, så du kan sende et hvilket som helst filnavn til den for at teste, om filen allerede er åben.
Kernen i denne kode er enkel. Du tester et givet filnavn for at se, om det kan tildeles en objektvariabel. Kun åbne projektmapper kan tildeles til en objektvariabel. Når du forsøger at tildele en lukket projektmappe til variablen, opstår der en fejl.
Hvis den givne projektmappe kan tildeles, er projektmappen åben; hvis der opstår en fejl, lukkes projektmappen.
Funktion FileIsOpenTest(TargetWorkbook As String) Som Boolean
Trin 1: Erklær dine variabler
Dim testbog som arbejdsbog
Trin 2: Bed Excel om at genoptage ved fejl
Ved fejl Genoptag Næste
Trin 3: Prøv at tildele målprojektmappen til TestBook
Set TestBook = Workbooks(TargetWorkbook)
Trin 4: Hvis der ikke opstod en fejl, er projektmappen allerede åben
Hvis Err.Number = 0 Så
FileIsOpenTest = Sand
Andet
FileIsOpenTest = Falsk
Afslut Hvis
Afslut funktion
Den første ting makroen gør er at erklære en String-variabel, der vil indeholde det filnavn, som brugeren vælger. TestBook er navnet på din strengvariabel.
I trin 2 fortæller du Excel, at der kan være en fejl ved kørsel af denne kode, og i tilfælde af en fejl genoptager du koden. Uden denne linje ville koden simpelthen stoppe, når der opstår en fejl. Igen tester du et givet filnavn for at se, om det kan tildeles en objektvariabel. Hvis den givne projektmappe kan tildeles, er den åben; hvis der opstår en fejl, er den lukket.
I trin 3 forsøger du at tildele den givne projektmappe til variabelen TestBook Object. Den projektmappe, du forsøger at tildele, er en strengvariabel kaldet TargetWorkbook. TargetWorkbook videregives til funktionen i funktionsdeklarationerne (se første linje i koden). Denne struktur eliminerer behovet for at hardkode et projektmappenavn, så du i stedet kan sende det som en variabel.
I trin 4 kontrollerer du blot, om der er opstået en fejl. Hvis der ikke opstod en fejl, er projektmappen åben, så du indstiller FileIsOpenTest til True. Hvis der opstod en fejl, er projektmappen ikke åben, og du indstiller FileIsOpenTest til False.
Igen kan denne funktion bruges til at evaluere enhver fil, du sender til den, via dens TargetWorkbook-argument. Dette er skønheden ved at sætte makroen ind i en funktion.
Den følgende makro viser, hvordan denne funktion implementeres. Her kalder du den nye FileIsOpenTest-funktion for at sikre, at brugeren ikke kan åbne en allerede åbnet fil:
Undermakro1()
Trin 1: Definer en strengvariabel
Dim F-navn som variant
Dim FNFileOnly As String
'Trin 2: GetOpenFilename Method aktiverer dialogboksen
FName = Application.GetOpenFilename( _
FileFilter:="Excel-arbejdsbøger,*.xl*", _
Title:="Vælg en projektmappe at åbne", _
MultiSelect:=False)
Trin 3: Åbn den valgte fil, hvis den ikke allerede er åbnet
Hvis FNavn <> Falsk Så
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))