A felmerült kérdések okán még mindig parkolópályán van a kis makrós sorozatunk következő része, de a mai posztban is VBA-val fogunk foglalkozni, méghozzá egy olyan megoldással, amely nagyjából a makrók jelentős százalékában felhasználható funkcionalitás.
A valószínűleg sokak által már sok makróban látott fájlkiválasztós, felugrós kis ablakról van szó, amellyel mi választhatjuk ki a foldereinkből azt a fájlt, amit később a makrónk majd átalakít, továbbküld, feldolgoz stb.
A megoldás nem túl komplex és nem is igényel iszonyú nagy tudást sem, hiszen mindössze az Application.GetOpenFilename metódus ismerete (megspékelve persze azért alapvető VBA ismeretekkel is) elégséges ahhoz, hogy egy ilyen felugró ablakot összehozzunk.
Olyannyira, hogy az én következő 10 soros kódom akár fele hosszúságúra is redukálható lenne, de azért ennyire ne minimalizáljunk most. Szóval ALT+F11 segítségével szépen átlépünk a Visual Basic Editorba, majd elkezdjük szépen felépíteni a kódot.
Két változót fogunk most definiálni, FileName elnevezéssel egy Variant típusút (ami nagyjából bármi lehet tehát) és egyet Response néven Integer típussal, amit arra fogunk használni, hogy valamiféle választ azért adjunk a felhasználónak, ha esetleg nem választott ki egyetlen fájlt sem:
Következő lépésként aztán szépen meghatározzuk egy ChDrive utasítás segítségével az alapértelmezett meghajtónkat illetve könyvtárunkat:
ChDrive "C:\Temp"
Ezután pedig következik maga a kis kód lelke, azaz FileName változónk vegye fel az Application.GetOpenFilename utasítás által megadott fájlnevet. A GetOpenFilename metódusnak van öt lehetséges paramétere, a Title a felugró kis ablak fejlécének szövegét határozza meg, FileFilter és FilterIndex segítségével azt tudjuk definiálni, hogy mi legyen az alapértelmezett szűrés a fájlokra az adott könyvtárban, MultiSelecttel pedig több fájlt is be tudunk olvastatni.
Nem szükséges, de beépíthetünk egy apró kis feltételt arra vonatkozóan, hogy ha a user nem választ ki egyetlen fájlt sem, akkor kapjon erre vonatkozóan egy figyelmeztetést. Ez szépen leírva úgy nézne ki, hogy ha a FileName = False (tehát üres), akkor a Response változónk vegyen fel egy MsgBox üzenetet értékként. És kész is vagyunk.
Szövegként:
Sub Felugroablak()
Dim FileName As Variant
Dim Response As Integer
ChDrive "C:\Temp"
FileName = Application.GetOpenFilename(Title:="Válaszd ki a fájlt!")
If FileName = False Then
Response = MsgBox("Nem választottál ki fájlt!", vbOKOnly & vbCritical, "Hiba")
Exit Sub
End If
End Sub