Hvis din VBA procedure skal bede brugeren om et filnavn, du kunne bruge funktionen InputBox og lad Excel bruger lave noget at skrive. En inputboks er dog normalt ikke det bedste værktøj til dette job, fordi de fleste brugere har svært ved at huske stier, omvendte skråstreg, filnavne og filtypenavne. Det er med andre ord alt for nemt at skrue op, når du skriver et filnavn.
For en bedre løsning på dette problem skal du bruge metoden GetOpenFilename for Application-objektet, som sikrer, at din kode får fat i et gyldigt filnavn, inklusive dens komplette sti. GetOpenFilename-metoden viser den velkendte Åbn-dialogboks (en død ringetone for dialogboksen Excel vises, når du vælger Filer → Åbn → Gennemse).
GetOpenFilename-metoden åbner faktisk ikke den angivne fil. Denne metode returnerer blot det brugervalgte filnavn som en streng. Så kan du skrive kode for at gøre hvad du vil med filnavnet.
Syntaksen for metoden GetOpenFilename
Den officielle syntaks for GetOpenFilename-metoden er som følger:
object.GetOpenFilename ([filFilter], [filterIndex],
[titel],[knapTekst], [multiSelect])
GetOpenFilename-metoden tager de valgfrie argumenter nedenfor.
Argument |
Hvad det gør |
Filfilter |
Bestemmer de filtyper, der vises i dialogboksen
(f.eks. *.TXT). Du kan angive flere filtre, som brugeren
kan vælge imellem. |
FilterIndex |
Bestemmer, hvilke af filfiltrene dialogboksen viser som
standard. |
Titel |
Angiver billedteksten til dialogboksens titellinje
. |
Knaptekst |
Ignoreret (bruges kun til Macintosh-versionen af Excel). |
MultiSelect |
Hvis True, kan brugeren vælge flere filer. |
Et GetOpenFilename eksempel
Argumentet fileFilter bestemmer, hvad der vises i dialogboksens Filtype-rulleliste. Dette argument består af par af filfilterstrenge efterfulgt af jokertegnfilfilterspecifikationen, med kommaer, der adskiller hver del og par. Hvis det udelades, har dette argument som standard følgende:
Alle filer (*.*), *.*
Bemærk, at denne streng består af to dele, adskilt af et komma:
Alle filer (*.*)
og
*.*
Den første del af denne streng er teksten, der vises i rullelisten Filtyper. Den anden del bestemmer, hvilke filer dialogboksen viser. For eksempel betyder *.* alle filer.
Koden i det følgende eksempel åbner en dialogboks, der beder brugeren om et filnavn. Proceduren definerer fem filfiltre. Bemærk, at VBA-linjefortsættelsessekvensen bruges til at opsætte filtervariablen; at gøre det hjælper med at forenkle dette ret komplicerede argument.
Sub GetImportFileName ()
Dim Finfo som streng
Dim FilterIndex As Long
Dim titel som streng
Dim filnavn som variant
' Opsæt liste over filfiltre
FIinfo = "Tekstfiler (*.txt),*.txt," & _
"Lotus-filer (*.prn),*.prn," & _
"Kommaseparerede filer (*.csv),*.csv," & _
"ASCII-filer (*.asc),*.asc," & _
"Alle filer (*.*),*.*"
' Vis *.* som standard
FilterIndex = 5
' Indstil dialogboksens billedtekst
Titel = "Vælg en fil at importere"
' Få filnavnet
Filnavn = Application.GetOpenFilename (FIinfo, _
Filterindeks, titel)
' Håndter returoplysninger fra dialogboksen
Hvis Filnavn = Falsk Så
MsgBox "Ingen fil blev valgt."
Andet
MsgBox "Du valgte " & Filnavn
Afslut Hvis
Slut Sub
Her er dialogboksen, som Excel viser, når du udfører denne procedure. Udseendet kan variere afhængigt af den version af Windows, du bruger, og de visningsindstillinger, du har indstillet.
GetOpen Filename-metoden viser en tilpasselig dialogboks og returnerer den valgte fils sti og navn. Den åbner ikke filen.
I et rigtigt program ville du gøre noget mere meningsfuldt med filnavnet. For eksempel vil du måske åbne den ved at bruge en erklæring som denne:
Arbejdsbøger. Åbn Filnavn
Bemærk, at FileName-variablen er erklæret som en Variant-datatype. Hvis brugeren klikker på Annuller, indeholder denne variabel en boolsk værdi (False). Ellers er Filnavn en streng. Derfor håndterer brug af en Variant-datatype begge muligheder.