Jei jūsų VBA procedūra turi paprašyti naudotojo už failo, kurį galima naudoti InputBox funkciją ir leiskite Excel vartotojas ką nors rašyti. Tačiau įvesties laukelis paprastai nėra geriausias įrankis šiam darbui, nes daugumai vartotojų sunku atsiminti kelius, pasviruosius brūkšnius, failų pavadinimus ir failų plėtinius. Kitaip tariant, per lengva suklysti įvedant failo pavadinimą.
Norėdami geriau išspręsti šią problemą, naudokite programos objekto metodą GetOpenFilename, kuris užtikrina, kad jūsų kodas pateks į tinkamą failo pavadinimą, įskaitant visą jo kelią. Taikant GetOpenFilename metodą rodomas pažįstamas Atidaryti dialogo langas (neveikiantis dialogo lango „Excel“ skambutis, kai pasirenkate Failas → Atidaryti → Naršyti).
GetOpenFilename metodas iš tikrųjų neatidaro nurodyto failo. Šis metodas tiesiog grąžina vartotojo pasirinktą failo pavadinimą kaip eilutę. Tada galite parašyti kodą ir daryti ką norite su failo pavadinimu.
Metodo GetOpenFilename sintaksė
Oficiali GetOpenFilename metodo sintaksė yra tokia:
object.GetOpenFilename ([fileFilter], [filterIndex],
[pavadinimas], [buttonText], [multiSelect])
Metodas „GetOpenFilename“ paima toliau pateiktus pasirenkamus argumentus.
Argumentas |
Ką tai daro |
Failų filtras |
Nustato dialogo lange rodomų failų tipus
(pvz., *.TXT). Galite nurodyti kelis filtrus, iš kurių vartotojas
gali pasirinkti. |
Filtravimo indeksas |
Nustato, kuris failas filtruoja dialogo langą pagal
numatytuosius nustatymus. |
Pavadinimas |
Nurodo dialogo lango pavadinimo
juostos antraštę . |
Mygtuko tekstas |
Ignoruojama (naudojama tik „Excel“ Macintosh versijai). |
MultiSelect |
Jei tiesa, vartotojas gali pasirinkti kelis failus. |
GetOpenFilename pavyzdys
Argumentas fileFilter nustato, kas bus rodoma dialogo lango išskleidžiamajame sąraše Files of Type. Šį argumentą sudaro failų filtrų eilučių poros, po kurių eina pakaitos simbolio failo filtro specifikacija, kableliais atskiriant kiekvieną dalį ir porą. Jei praleista, šis argumentas pagal numatytuosius nustatymus yra toks:
Visi failai (*.*), *.*
Atkreipkite dėmesį, kad ši eilutė susideda iš dviejų dalių, atskirtų kableliu:
Visi failai (*.*)
ir
*.*
Pirmoji šios eilutės dalis yra tekstas, rodomas išskleidžiamajame sąraše Files of Type. Antroji dalis nustato, kurie failai rodomi dialogo lange. Pavyzdžiui, *.* reiškia visus failus.
Šiame pavyzdyje pateiktas kodas atidaro dialogo langą, kuriame vartotojo prašoma įvesti failo pavadinimą. Procedūra apibrėžia penkis failų filtrus. Atkreipkite dėmesį, kad VBA eilutės tęsimo seka naudojama filtro kintamajam nustatyti; tai padeda supaprastinti šį gana sudėtingą argumentą.
Sub GetImportFileName ()
Dim Finfo As String
Dim FilterIndex As Long
Pritemdykite pavadinimą kaip eilutę
Pritemdykite failo pavadinimą kaip variantą
' Nustatykite failų filtrų sąrašą
Finfo = "Teksto failai (*.txt),*.txt" & _
„Lotus Files (*.prn),*.prn“ ir _
„Kableliais atskirti failai (*.csv),*.csv“ ir _
„ASCII failai (*.asc),*.asc“ ir _
"Visi failai (*.*),*.*"
Pagal numatytuosius nustatymus rodyti *.*
FilterIndex = 5
' Nustatykite dialogo lango antraštę
Title = „Pasirinkite importuotiną failą“
' Gaukite failo pavadinimą
FileName = Application.GetOpenFilename (FIinfo, _
FilterIndex, Title)
Tvarkyti grąžinimo informaciją iš dialogo lango
Jei failo pavadinimas = false, tada
MsgBox „Nepasirinktas joks failas“.
Kitas
MsgBox „Jūs pasirinkote“ & Failo pavadinimas
Pabaiga, jei
Pabaigos sub
Čia yra dialogo langas, rodomas „Excel“, kai vykdote šią procedūrą. Išvaizda gali skirtis, atsižvelgiant į naudojamą „Windows“ versiją ir nustatytas rodymo parinktis.
Naudojant GetOpen failo pavadinimo metodą rodomas tinkinamas dialogo langas ir pateikiamas pasirinkto failo kelias bei pavadinimas. Tai neatidaro failo.
Tikroje programoje su failo pavadinimu padarytumėte ką nors prasmingesnio. Pavyzdžiui, galbūt norėsite jį atidaryti naudodami tokį teiginį:
Workbooks.Open FileName
Atkreipkite dėmesį, kad kintamasis FileName deklaruojamas kaip Variant duomenų tipas. Jei vartotojas spustelėja Atšaukti, tame kintamajame yra Būlio reikšmė (False). Kitu atveju failo pavadinimas yra eilutė. Todėl naudojant Variant duomenų tipą, išsprendžiamos abi galimybės.