Om din VBA förfarande måste be användaren om ett filnamn, du kan använda InputBox funktionen och låta Excel användaren göra en del skriva. En inmatningsruta är vanligtvis inte det bästa verktyget för det här jobbet, eftersom de flesta användare har svårt att komma ihåg sökvägar, omvända snedstreck, filnamn och filtillägg. Det är med andra ord alldeles för lätt att skruva ihop när man skriver ett filnamn.
För en bättre lösning på detta problem, använd metoden GetOpenFilename för Application-objektet, som säkerställer att din kod får tag i ett giltigt filnamn, inklusive dess fullständiga sökväg. Metoden GetOpenFilename visar den välbekanta dialogrutan Öppna (en död ringsignal för dialogrutan Excel visas när du väljer Arkiv → Öppna → Bläddra).
Metoden GetOpenFilename öppnar faktiskt inte den angivna filen. Denna metod returnerar helt enkelt det användarvalda filnamnet som en sträng. Sedan kan du skriva kod för att göra vad du vill med filnamnet.
Syntaxen för metoden GetOpenFilename
Den officiella syntaxen för metoden GetOpenFilename är följande:
object.GetOpenFilename ([filFilter], [filterIndex],
[titel],[buttonText], [multiSelect])
GetOpenFilename-metoden tar de valfria argumenten nedan.
Argument |
Vad den gör |
Filfilter |
Bestämmer vilka typer av filer som visas i dialogrutan
(till exempel *.TXT). Du kan ange flera filter för användaren
att välja mellan. |
FilterIndex |
Bestämmer vilka av filfiltren som dialogrutan visar som
standard. |
Titel |
Anger bildtexten för dialogrutans
namnlist. |
Knapp-text |
Ignoreras (används endast för Macintosh-versionen av Excel). |
Flera val |
Om det är sant kan användaren välja flera filer. |
Ett exempel på GetOpenFilename
Argumentet fileFilter avgör vad som visas i dialogrutans rullgardinslista Filer av typ. Detta argument består av par av filfiltersträngar följt av filfilterspecifikationen med jokertecken, med kommatecken som separerar varje del och par. Om det utelämnas har detta argument som standard följande:
Alla filer (*.*), *.*
Observera att den här strängen består av två delar, åtskilda av ett kommatecken:
Alla filer (*.*)
och
*.*
Den första delen av denna sträng är texten som visas i rullgardinsmenyn Filtyper. Den andra delen avgör vilka filer dialogrutan visar. Till exempel betyder *.* alla filer.
Koden i följande exempel öppnar en dialogruta som ber användaren om ett filnamn. Proceduren definierar fem filfilter. Observera att VBA-linjefortsättningssekvensen används för att ställa in filtervariabeln; att göra det hjälper till att förenkla detta ganska komplicerade argument.
Sub GetImportFileName ()
Dim Finfo Som String
Dim FilterIndex As Long
Dim titel som sträng
Dim filnamn som variant
' Ställ in en lista över filfilter
FIinfo = "Textfiler (*.txt),*.txt," & _
"Lotus-filer (*.prn),*.prn," & _
"Kommaseparerade filer (*.csv),*.csv," & _
"ASCII-filer (*.asc),*.asc," & _
"Alla filer (*.*),*.*"
' Visa *.* som standard
FilterIndex = 5
' Ställ in dialogrutans rubrik
Titel = "Välj en fil att importera"
'Hämta filnamnet
Filnamn = Application.GetOpenFilename (FIinfo, _
FilterIndex, Titel)
' Hantera returinformation från dialogrutan
Om filnamn = Falskt då
MsgBox "Ingen fil har valts."
Annan
MsgBox "Du valde " & filnamn
Avsluta om
Avsluta Sub
Här är dialogrutan som Excel visas när du utför den här proceduren. Utseendet kan variera beroende på vilken version av Windows du använder och vilka visningsalternativ du har ställt in.
Metoden GetOpen Filename visar en anpassningsbar dialogruta och returnerar den valda filens sökväg och namn. Den öppnar inte filen.
I en riktig applikation skulle du göra något mer meningsfullt med filnamnet. Du kanske till exempel vill öppna den genom att använda ett uttalande som det här:
Arbetsböcker. Öppna filnamn
Observera att filnamnsvariabeln deklareras som en variantdatatyp. Om användaren klickar på Avbryt innehåller variabeln ett booleskt värde (False). Annars är filnamn en sträng. Användning av en variantdatatyp hanterar därför båda möjligheterna.