Mens du tenker på å åpne Excel-arbeidsbøker automatisk, bør du vurdere hva som kan skje hvis du prøver å åpne en bok som allerede er åpen. I ikke-VBA-verdenen prøver Excel å åpne filen igjen, med meldingen som advarer om at eventuelle ulagrede endringer vil gå tapt. Du kan beskytte deg mot en slik hendelse ved å sjekke om en gitt fil allerede er åpen før du prøver å åpne den igjen.
Unngå denne advarselen.
Hvordan makroen fungerer
Det første å legge merke til med denne makroen er at det er en funksjon, ikke en Sub-prosedyre. Som du vil se, ved å gjøre denne makroen til en funksjon, kan du sende et hvilket som helst filnavn til den for å teste om filen allerede er åpen.
Hovedpoenget i denne koden er enkel. Du tester et gitt filnavn for å se om det kan tilordnes en objektvariabel. Bare åpnede arbeidsbøker kan tilordnes en objektvariabel. Når du prøver å tilordne en lukket arbeidsbok til variabelen, oppstår det en feil.
Hvis den gitte arbeidsboken kan tildeles, er arbeidsboken åpen; hvis det oppstår en feil, lukkes arbeidsboken.
Funksjon FileIsOpenTest(TargetWorkbook As String) Som boolsk
'Trinn 1: Deklarer variablene dine
Dim testbok som arbeidsbok
'Trinn 2: Be Excel om å fortsette ved feil
Ved feil på Fortsett neste
'Trinn 3: Prøv å tilordne målarbeidsboken til TestBook
Sett TestBook = Workbooks(TargetWorkbook)
'Trinn 4: Hvis ingen feil oppstod, er arbeidsboken allerede åpen
Hvis Err.Number = 0 Da
FileIsOpenTest = True
Ellers
FileIsOpenTest = False
Slutt om
Avslutt funksjon
Det første makroen gjør er å erklære en strengvariabel som vil inneholde filnavnet som brukeren velger. TestBook er navnet på strengvariabelen din.
I trinn 2 forteller du Excel at det kan være en feil under kjøring av denne koden, og i tilfelle en feil gjenopptar du koden. Uten denne linjen ville koden ganske enkelt stoppet når det oppstår en feil. Igjen tester du et gitt filnavn for å se om det kan tilordnes en objektvariabel. Hvis den gitte arbeidsboken kan tildeles, er den åpen; hvis det oppstår en feil, er den lukket.
I trinn 3 prøver du å tilordne den gitte arbeidsboken til TestBook Object-variabelen. Arbeidsboken du prøver å tilordne er en strengvariabel kalt TargetWorkbook. TargetWorkbook sendes til funksjonen i funksjonserklæringene (se første linje i koden). Denne strukturen eliminerer behovet for å hardkode et arbeidsboknavn, slik at du kan sende det som en variabel i stedet.
I trinn 4 sjekker du bare om det har oppstått en feil. Hvis det ikke oppstod en feil, er arbeidsboken åpen, så du setter FileIsOpenTest til True. Hvis det oppstod en feil, er ikke arbeidsboken åpen, og du setter FileIsOpenTest til False.
Igjen kan denne funksjonen brukes til å evaluere hvilken som helst fil du sender til den, via TargetWorkbook-argumentet. Dette er det fine med å sette makroen inn i en funksjon.
Den følgende makroen viser hvordan du implementerer denne funksjonen. Her kaller du den nye FileIsOpenTest-funksjonen for å sikre at brukeren ikke kan åpne en allerede åpnet fil:
Sub Makro1()
'Trinn 1: Definer en strengvariabel
Dim FName som variant
Dim FNFileOnly As String
'Trinn 2: GetOpenFilename Method aktiverer dialogboksen
FName = Application.GetOpenFilename( _
FileFilter:="Excel-arbeidsbøker,*.xl*", _
Title:="Velg en arbeidsbok å åpne", _
MultiSelect:=False)
'Trinn 3: Åpne den valgte filen hvis den ikke allerede er åpnet
Hvis FName <> False Da
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))