Pokud váš postup VBA musí požádat uživatele k zadání názvu souboru, jste mohli použít funkci InputBox a nechat uživatele Excel udělat nějaké psaní. Vstupní pole však obvykle není tím nejlepším nástrojem pro tuto práci, protože pro většinu uživatelů je obtížné zapamatovat si cesty, zpětná lomítka, názvy souborů a přípony souborů. Jinými slovy, je až příliš snadné se podělat při psaní názvu souboru.
Pro lepší řešení tohoto problému použijte metodu GetOpenFilename objektu Application, která zajistí, že váš kód dostane do rukou platný název souboru, včetně jeho úplné cesty. Metoda GetOpenFilename zobrazí známé dialogové okno Otevřít (nefunkční vyzvánění dialogového okna Excel zobrazí, když zvolíte Soubor → Otevřít → Procházet).
Metoda GetOpenFilename ve skutečnosti neotevře zadaný soubor. Tato metoda jednoduše vrátí uživatelem vybraný název souboru jako řetězec. Poté můžete napsat kód, který si s názvem souboru udělá, co chcete.
Syntaxe pro metodu GetOpenFilename
Oficiální syntaxe metody GetOpenFilename je následující:
object.GetOpenFilename ([filter souboru], [filterIndex],
[title], [buttonText], [multiSelect])
Metoda GetOpenFilename přebírá volitelné argumenty níže.
Argument |
Co to dělá |
FileFilter |
Určuje typy souborů, které se zobrazí v dialogovém okně
(například *.TXT). Uživatel si může vybrat z několika filtrů
. |
FilterIndex |
Určuje, který ze souborových filtrů se ve
výchozím nastavení zobrazí dialogové okno . |
Titul |
Určuje titulek pro záhlaví dialogového okna
. |
ButtonText |
Ignorováno (používá se pouze pro verzi Excelu pro Macintosh). |
Více násobný výběr |
Pokud je True, uživatel může vybrat více souborů. |
Příklad GetOpenFilename
Argument fileFilter určuje, co se zobrazí v rozevíracím seznamu Soubory typu dialogového okna. Tento argument se skládá z párů řetězců filtru souborů následovaných specifikací filtru souboru se zástupnými znaky s čárkami oddělujícími každou část a pár. Pokud je tento argument vynechán, výchozí hodnota je následující:
Všechny soubory (*.*), *.*
Všimněte si, že tento řetězec se skládá ze dvou částí oddělených čárkou:
Všechny soubory (*.*)
a
*.*
První část tohoto řetězce je text zobrazený v rozevíracím seznamu Soubory typu. Druhá část určuje, které soubory dialogové okno zobrazí. Například *.* znamená všechny soubory.
Kód v následujícím příkladu otevře dialogové okno, které uživatele požádá o název souboru. Postup definuje pět filtrů souborů. Všimněte si, že sekvence pokračování řádku VBA se používá k nastavení proměnné Filtr; když to uděláte, pomůže to zjednodušit tento poměrně komplikovaný argument.
Sub GetImportFileName ()
Dim Fininfo As String
Dim FilterIndex As Long
Ztlumit název jako řetězec
Dim FileName as Variant
' Nastavte seznam filtrů souborů
FInfo = “Textové soubory (*.txt),*.txt,” & _
"Lotus Files (*.prn),*.prn," & _
"Comma Separated Files (*.csv),*.csv," & _
"Soubory ASCII (*.asc),*.asc," & _
"Všechny soubory (*.*),*.*"
' Ve výchozím nastavení zobrazit *.*
Index filtru = 5
' Nastavte titulek dialogového okna
Title = „Vyberte soubor k importu“
'Získejte název souboru
FileName = Application.GetOpenFilename (FInfo, _
FilterIndex, Title)
' Zpracovat návratové informace z dialogového okna
If FileName = False Then
MsgBox "Nebyl vybrán žádný soubor."
Jiný
MsgBox „Vybrali jste“ & FileName
End If
End Sub
Zde je dialogové okno, které Excel zobrazí, když provedete tento postup. Vzhled se může lišit v závislosti na verzi systému Windows, kterou používáte, a na možnostech zobrazení, které jste nastavili.
Metoda GetOpen Filename zobrazí přizpůsobitelné dialogové okno a vrátí cestu a název vybraného souboru. Neotevře soubor.
Ve skutečné aplikaci byste s názvem souboru udělali něco smysluplnějšího. Můžete jej například otevřít pomocí příkazu, jako je tento:
Workbooks.Open FileName
Všimněte si, že proměnná FileName je deklarována jako datový typ Variant. Pokud uživatel klepne na tlačítko Storno, tato proměnná obsahuje logickou hodnotu (False). Jinak je FileName řetězec. Použití datového typu Variant tedy zvládá obě možnosti.