Hvis VBA-prosedyren din trenger å spørre brukeren om et filnavn, kan du bruke InputBox-funksjonen og la Excel-brukeren skrive litt. En inndataboks er vanligvis ikke det beste verktøyet for denne jobben, fordi de fleste brukere synes det er vanskelig å huske baner, omvendt skråstrek, filnavn og filutvidelser. Det er med andre ord altfor lett å skru på når du skriver inn et filnavn.
For en bedre løsning på dette problemet, bruk GetOpenFilename-metoden til Application-objektet, som sikrer at koden din får tak i et gyldig filnavn, inkludert den fullstendige banen. GetOpenFilename-metoden viser den velkjente Open-dialogboksen (en død ringetone for dialogboksen Excel vises når du velger Fil → Åpne → Bla gjennom).
GetOpenFilename-metoden åpner faktisk ikke den angitte filen. Denne metoden returnerer ganske enkelt det brukervalgte filnavnet som en streng. Deretter kan du skrive kode for å gjøre hva du vil med filnavnet.
Syntaksen for GetOpenFilename-metoden
Den offisielle syntaksen til GetOpenFilename-metoden er som følger:
object.GetOpenFilename ([filFilter], [filterIndex],
[tittel],[buttonText], [multiSelect])
GetOpenFilename-metoden tar de valgfrie argumentene nedenfor.
Argument |
Hva det gjør |
Filfilter |
Bestemmer filtypene som vises i dialogboksen
(for eksempel *.TXT). Du kan angi flere filtre som brukeren
kan velge mellom. |
FilterIndex |
Bestemmer hvilke av filfiltrene dialogboksen viser som
standard. |
Tittel |
Angir bildeteksten for dialogboksens tittellinje
. |
Knapptekst |
Ignorert (brukes kun for Macintosh-versjonen av Excel). |
Flervalg |
Hvis det er sant, kan brukeren velge flere filer. |
Et eksempel på GetOpenFilename
Argumentet fileFilter bestemmer hva som vises i dialogboksens Filtype-rullegardinliste. Dette argumentet består av par med filfilterstrenger etterfulgt av jokertegnfilfilterspesifikasjonen, med kommaer som skiller hver del og par. Hvis det utelates, har dette argumentet som standard følgende:
Alle filer (*.*), *.*
Legg merke til at denne strengen består av to deler, atskilt med komma:
Alle filer (*.*)
og
*.*
Den første delen av denne strengen er teksten som vises i rullegardinlisten Files of Type. Den andre delen bestemmer hvilke filer dialogboksen viser. For eksempel betyr *.* alle filer.
Koden i følgende eksempel åpner en dialogboks som ber brukeren om et filnavn. Prosedyren definerer fem filfiltre. Legg merke til at VBA-linjefortsettelsessekvensen brukes til å sette opp filtervariabelen; å gjøre det bidrar til å forenkle dette ganske kompliserte argumentet.
Sub GetImportFileName ()
Dim Finfo som streng
Dim FilterIndex As Long
Dim tittel som streng
Dim filnavn som variant
' Sett opp liste over filfiltre
FIinfo = "Tekstfiler (*.txt),*.txt," & _
"Lotus-filer (*.prn),*.prn," & _
"Kommaseparerte filer (*.csv),*.csv," & _
"ASCII-filer (*.asc),*.asc," & _
"Alle filer (*.*),*.*"
' Vis *.* som standard
FilterIndex = 5
' Angi dialogboksens bildetekst
Tittel = "Velg en fil å importere"
' Få filnavnet
Filnavn = Application.GetOpenFilename (FIinfo, _
FilterIndex, Tittel)
' Håndter returinformasjon fra dialogboksen
Hvis Filnavn = False Da
MsgBox "Ingen fil ble valgt."
Ellers
MsgBox "Du valgte " & filnavn
Slutt om
End Sub
Her er dialogboksen Excel viser når du utfører denne prosedyren. Utseendet kan variere, avhengig av hvilken versjon av Windows du bruker og visningsalternativene du har angitt.
GetOpen Filename-metoden viser en tilpassbar dialogboks og returnerer den valgte filens bane og navn. Den åpner ikke filen.
I en ekte applikasjon vil du gjøre noe mer meningsfylt med filnavnet. Det kan for eksempel være lurt å åpne den ved å bruke en setning som denne:
Arbeidsbøker. Åpne filnavn
Legg merke til at filnavn-variabelen er deklarert som en variantdatatype. Hvis brukeren klikker Avbryt, inneholder variabelen en boolsk verdi (False). Ellers er filnavn en streng. Derfor håndterer bruk av en variantdatatype begge mulighetene.