Če mora vaša procedura VBA od uporabnika zahtevati ime datoteke, lahko uporabite funkcijo InputBox in dovolite uporabniku Excela, da nekaj tipka. Vendar pa vnosno polje običajno ni najboljše orodje za to nalogo, ker si večina uporabnikov težko zapomni poti, poševnice, imena datotek in razširitve datotek. Z drugimi besedami, pri vnašanju imena datoteke je preveč enostavno zajebati.
Za boljšo rešitev te težave uporabite metodo GetOpenFilename predmeta Application, ki zagotavlja, da vaša koda dobi veljavno ime datoteke, vključno z njeno celotno potjo. Metoda GetOpenFilename prikaže znano pogovorno okno Odpri (odprto zvonjenje za pogovorno okno Excel se prikaže, ko izberete Datoteka → Odpri → Prebrskaj).
Metoda GetOpenFilename dejansko ne odpre podane datoteke. Ta metoda preprosto vrne uporabniško izbrano ime datoteke kot niz. Nato lahko napišete kodo, da z imenom datoteke naredite, kar želite.
Sintaksa metode GetOpenFilename
Uradna sintaksa metode GetOpenFilename je naslednja:
object.GetOpenFilename ([filter file], [filterIndex],
[naslov],[buttonText], [večizberi])
Metoda GetOpenFilename sprejme spodnje izbirne argumente.
Prepir |
Kaj počne |
FileFilter |
Določa vrste datotek, ki se prikažejo v pogovornem oknu
(na primer *.TXT). Določite lahko več filtrov, med katerimi
lahko izbira uporabnik . |
FilterIndex |
Določa, kateri od filtrov datotek se
privzeto prikaže v pogovornem oknu . |
Naslov |
Določa napis za naslovno
vrstico pogovornega okna . |
ButtonText |
Prezrto (uporablja se samo za različico Excela za Macintosh). |
MultiSelect |
Če je True, lahko uporabnik izbere več datotek. |
Primer GetOpenFilename
Argument fileFilter določa, kaj se prikaže na spustnem seznamu Files of Type v pogovornem oknu. Ta argument je sestavljen iz parov nizov filtra datotek, ki jim sledi specifikacija filtra datotek z nadomestnimi znaki, z vejicami, ki ločujejo vsak del in par. Če je izpuščen, je ta argument privzeto naslednji:
Vse datoteke (*.*), *.*
Upoštevajte, da je ta niz sestavljen iz dveh delov, ločenih z vejico:
Vse datoteke (*.*)
in
*.*
Prvi del tega niza je besedilo, prikazano na spustnem seznamu Files of Type. Drugi del določa, katere datoteke prikaže pogovorno okno. Na primer, *.* pomeni vse datoteke.
Koda v naslednjem primeru odpre pogovorno okno, ki uporabnika vpraša za ime datoteke. Postopek definira pet filtrov datotek. Upoštevajte, da se za nastavitev spremenljivke Filter uporablja zaporedje nadaljevanja vrstice VBA; to pomaga poenostaviti ta precej zapleten argument.
Sub GetImportFileName ()
Dim Finfo kot niz
Dim FilterIndex As Long
Dim Title kot niz
Dim FileName kot različica
' Nastavite seznam filtrov datotek
FInfo = »Besedilne datoteke (*.txt),*.txt« & _
»Datoteke Lotus (*.prn),*.prn« & _
»Datoteke, ločene z vejico (*.csv),*.csv« & _
»Datoteke ASCII (*.asc),*.asc« & _
"Vse datoteke (*.*),*.*"
' Privzeto prikaži *.*
Indeks filtra = 5
' Nastavite napis pogovornega okna
Naslov = "Izberite datoteko za uvoz"
' Pridobite ime datoteke
Ime datoteke = Application.GetOpenFilename (FInfo, _
FilterIndex, Naslov)
' Obravnava povratne informacije iz pogovornega okna
Če je Ime datoteke = False, potem
MsgBox "Nobena datoteka ni bila izbrana."
Drugače
MsgBox »Izbrali ste« & Ime datoteke
Konec Če
Končni sub
Tukaj je pogovorno okno, ki ga Excel prikaže, ko izvedete ta postopek. Videz se lahko razlikuje, odvisno od različice sistema Windows, ki jo uporabljate, in možnosti prikaza, ki ste jih nastavili.
Metoda GetOpen Filename prikaže prilagodljivo pogovorno okno in vrne pot in ime izbrane datoteke. Ne odpre datoteke.
V pravi aplikaciji bi z imenom datoteke naredili nekaj bolj smiselnega. Na primer, morda ga boste želeli odpreti z izjavo, kot je ta:
Delovni zvezki. Odprite FileName
Upoštevajte, da je spremenljivka FileName deklarirana kot podatkovni tip Variant. Če uporabnik klikne Prekliči, ta spremenljivka vsebuje logično vrednost (False). V nasprotnem primeru je FileName niz. Zato uporaba podatkovnega tipa Variant obravnava obe možnosti.