Fájlbeolvastatás a felhasználóval VBA segítségével

2016. július 27. - Office Guru

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.

file1.jpgA 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:

file2.jpgKö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.

file3.jpg

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.

file4.jpgSzö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

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr508918548

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Erikgrog 2016.07.27. 21:57:31

Szia!
Imádom az oldaladat, máris kipróbáltam, amit csináltál. :)

Mintha a végére még kellene egy ilyesmi, nem?

Workbooks.Open FileName

üdv,
Erik

toportyánféreg 2016.07.27. 22:37:42

@Erikgrog: az attól (is) függ milyen fájlt választ a user,.
Ez most itt egy univerzális eljárás, ami visszaad egy fájlnevet, amit a kód további része majd felhasznál inputként. De az lehet egy szövegfájl , stb . bármi.

Ha excelt akarsz megnyitni, akkor gondolom igen, az kell a végére.