En Excel Macro å avgjøre om en arbeidsbok Er Open

Når du tenker på automatisk åpne Excel-arbeidsbøker, vurdere hva som kan skje hvis du prøver å åpne en bok som allerede er åpen. I den ikke-VBA verden, forsøker Excel å åpne filen igjen, med beskjed vist advarsel om at eventuelle ulagrede endringer vil gå tapt. Du kan beskytte mot en slik hendelse ved å sjekke om en gitt fil er allerede åpen før du prøver å åpne den igjen.
Unngå denne advarselen.
Hvordan makro fungerer

Det første du legger merke til om dette makro er at det er en funksjon, ikke en Sub prosedyre. Som du vil se, noe som gjør denne makroen en funksjon gjør det mulig å passere noen filnavnet til det å teste om denne filen er allerede åpen.

Kjernen i denne koden er enkel. Du tester en gitt filnavn for å se om det kan tildeles et objekt variabel. Bare åpne arbeidsbøker kan tilordnes et objekt variabel. Når du prøver å tildele en lukket arbeidsbok til variabelen, oppstår en feil

Hvis gitt boken kan tilordnes, er åpen arbeidsboken.; Hvis det oppstår en feil, vil arbeidsboken lukket
Funksjon FileIsOpenTest (TargetWorkbook As String) As Boolean'Step. 1: Erklærer variabler Dim TestBook Som Workbook'Step 2: Fortell Excel for å fortsette på feil On Error Resume Next'Step 3 : Prøv å tildele målet arbeidsbok til TestBook Set TestBook = Arbeidsbøker (TargetWorkbook) 'Trinn 4: Hvis ingen feil, er arbeidsbok allerede åpen Hvis err.number = 0 Then FileIsOpenTest = True Else FileIsOpenTest = False End IfEnd Function

første makroen gjør er å erklære en String variabel som vil holde filnavnet som brukeren velger. TestBook er navnet på String variabel.

I trinn 2, fortelle deg Excel at det kan være en feil under kjøring av denne koden, og i tilfelle av en feil, gjenoppta koden. Uten denne linjen, vil koden bare stoppe når det oppstår en feil. Igjen, teste deg en gitt filnavn for å se om det kan tildeles et objekt variabel. Hvis gitt boken kan tilordnes, er det åpen; Hvis det oppstår en feil, er det stengt.

I trinn 3, forsøke å tildele den gitte arbeidsboken til TestBook Object variable. Arbeidsboken du prøver å tildele en streng variabel kalt TargetWorkbook. TargetWorkbook sendes til funksjonen i funksjons erklæringer (se første linje av koden). Denne strukturen eliminerer behovet for å hard-kode en arbeidsbok navn, slik at du kan gi det som en variabel i stedet.

I trinn 4, du bare sjekke for å se om det oppstod en feil. Dersom en feil ikke forekommer, er arbeidsboken åpen, slik at du setter FileIsOpenTest til True. Hvis det oppstår en feil, er arbeidsboken ikke er åpen, og du setter FileIsOpenTest til False.
Igjen, kan denne funksjonen brukes til å vurdere hvilken som helst fil du sender til det, via sin TargetWorkbook argument. Dette er skjønnheten av å sette makro inn en funksjon.

Følgende makro demonstrerer hvordan å implementere denne funksjonen. Her, du kaller den nye FileIsOpenTest funksjon å sørge for at brukeren ikke kan åpne en allerede åpnet filen:
Sub Makro1 () 'Trinn 1: Definer en streng variabel Dim fname Som Variant Dim FNFileOnly Som String'Step 2: GetOpenFilename Metode aktiverer dialogboksen fname = Application.GetOpenFilename (_ Filefilter: = ". Excel arbeidsbøker, * xl *", _ Tittel: = "Velg en arbeidsbok til Open", _ Multiselect: = False) 'Trinn 3: Åpne den valgte filen hvis ikke allerede åpnet Hvis fname < > False Deretter FNFileOnly = StrReverse (Venstre (StrReverse (fname), _ InStr (StrReverse (fname), "\\") - 1)) Hvis FileIsOpenTest (FNFileOnly) = True Deretter MsgBox "Den oppgitte filen er allerede åpne" Else Workbooks.Open Filename: = fname End If End IfEnd Sub

Med denne makroen gjennomført, får du vennligere meldingsboksen vises, En renere, mer konsis melding
Hvordan bruke makroen

å.. implementere denne makroen, kan du kopiere og lime inn begge deler av koden inn i en standard modul.

Aktiver Visual Basic Editor ved å trykke Alt + F11

Høyreklikk på prosjektet /arbeidsbok . navnet i prosjektvinduet

Velg Sett → Module

Skriv eller lim inn koden i den nyopprettede modulen

(.. valgfritt) Tilordne makro til en knapp.



Previous:
Next Page: