Sziasztok!
Van egy VBA kódom ami nem felhasználó biztos még. Egy excelből szeretném futatni, miszerint kitallóz egy fájlt majd amit megnyitott abból az átmásolja a tartalmat magába az xls be ahonnan indult.
Ez a tallozás része.
Sub megnyitás()
Dim fileName
fileName = Application.GetOpenFilename("Comma Separated Values (*.csv),*.csv")
If fileName <> "False" Then
Workbooks.Open fileName, Format:=2
End If
End Sub
Azt szeretném elérni, hogy amit kitallóz fájlt, annak az útja egy változóba legyen tárolva, amit később fel tudjak használni ebbe a tartalom kiolvasó programba a filpath helyére.
Nem tudom megoldani, hogy amit kitallóz fájlt a felhasználó annak az elérési útvonala elmentődjön és azt meg tudjam nyitni makróból.
Tartalom kiolvasó progi.
Sub Open_csv()
ImportCSVFile ("D:\valahol\x.csv") ' A csv fájl elérési útvonala
End Sub
Sub ImportCSVFile(filepath As String)
Dim line As String
Dim arrayOfElements
Dim linenumber As Integer
Dim elementnumber As Integer
Dim element As Variant
linenumber = 0
elementnumber = 0
Open filepath For Input As #1
Do While Not EOF(1)
linenumber = linenumber + 1
Line Input #1, line
arrayOfElements = Split(line, ";") 'A delimiter itt a pontosvessző
elementnumber = 0
For Each element In arrayOfElements
elementnumber = elementnumber + 1
Cells(linenumber, elementnumber).Value = element
Next
Loop
Close #1
End Sub
Akinek van ötlete kérem írjon.
köszönöm, üdv.
- 7616 megtekintés
Hozzászólások
Public $filename As String
..
$filename = Application.GetOpenFilename
- A hozzászóláshoz be kell jelentkezni
Szia
Köszi ezt értem, de az nem világos, hogy utána hogy tudom az eltárolt elérési utas fájlt megnyitni.
Rövden, felhasználó tallóz, fájl megnyílik és ennek a fájlnak a tartalma átmásolódik a az xls be.
Nem tudom megnyitni az elmentett eérési utat.
Üdv
- A hozzászóláshoz be kell jelentkezni
Lasd: http://www.ozgrid.com/VBA/variable-scope-lifetime.htm
Ha egy modulban kell, akkor rakd kivulre a deklaraciot. Ha modulok kozott, akkor public.
- A hozzászóláshoz be kell jelentkezni
Szia
Köszi ezt értem, de az nem világos, hogy utána hogy tudom az eltárolt elérési utas fájlt megnyitni.
Rövden, felhasználó tallóz, fájl megnyílik és ennek a fájlnak a tartalma átmásolódik a az xls be.
Nem tudom megnyitni az elmentett eérési utat.
Üdv
- A hozzászóláshoz be kell jelentkezni
Public fileName as String
Sub megnyitás()
...
fileName = Application.GetOpenFilename("Comma Separated Values (*.csv),*.csv")
...
Sub Open_csv()
ImportCSVFile(fileName)
...
- A hozzászóláshoz be kell jelentkezni
Szia
Ez lenne a vége?
Sub megnyitás()
Dim fileName
fileName = Application.GetOpenFilename("Comma Separated Values (*.csv),*.csv")
If fileName <> "False" Then
Workbooks.Open fileName, Format:=2
End If
End Sub
Sub Open_csv()
ImportCSVFile (fileName) ' A csv fájl elérési útvonala
End Sub
Sub ImportCSVFile(filepath As String)
Dim line As String
Dim arrayOfElements
Dim linenumber As Integer
Dim elementnumber As Integer
Dim element As Variant
linenumber = 0
elementnumber = 0
Open filepath For Input As #1
Do While Not EOF(1)
linenumber = linenumber + 1
Line Input #1, line
arrayOfElements = Split(line, ";") 'A delimiter itt a pontosvessző
elementnumber = 0
For Each element In arrayOfElements
elementnumber = elementnumber + 1
Cells(linenumber, elementnumber).Value = element
Next
Loop
Close #1
End Sub
Ez sajna nem fut le, és egy makróba kellene raknom az egészet, nem háromba
Van rá ötleted?
Üdv
- A hozzászóláshoz be kell jelentkezni
Ugy ird ahogy en irtam! A filename deklaracionak a sub-okon kivul a helye, nem pedig a "Sub megnyitas()"-ban.
Peldaul:
Public szoveg as String
Sub beallit()
szoveg = "hello vilag"
End Sub
Sub kiir()
msgbox(szoveg)
End Sub
- A hozzászóláshoz be kell jelentkezni
KÖSZÖNÖM neked is
- A hozzászóláshoz be kell jelentkezni
Lehet, a problémádból semmit nem értek...
Hátulról kezdve: Ha egy makrót/eljárást akarsz, mi akadályoz meg benne, hogy annyi legyen?
Ha az
Open_csv
-t a
megnyitás
után/végén akarod hívni, akkor miért nem teszed a
megnyitás
végére az
ImportCSVFile (fileName)
-t?
Az
Open_csv
-ben az
ImportCSVFile (fileName)
nem fog működni, mert a
fileName
változót a
megnyitás
eljáráson belül deklaráltad (más is ezt akarta kifejezni), vagyis, ha jól tudom, ha nincs külön megadva, hogy ne legyen automatikus változó-létrehozás (
Option Explicit
), akkor létrejön neked az
Open_csv
-n _belül_ egy üres
fileName
, amikor az
ImportCSVFile
megpróbálja használni. Az
Open_csv
nem látja a
megnyitás
-ban
Dim
utasítással létrehozott változókat. Ha jól értem, arra van szükség, amit az előző bekezdésben írtam.
Workbooks.Open fileName, Format:=2
– Ez elvileg megnyitja a kiválasztott CSV-t, nem? De minek, ha később manuálisan olvasod a CSV-t? Vagy minek olvasod be később külön? Azzal nem csak felülírod az Excel által beolvasott CSV celláit? Neked szerintem nem ez kell, hanem egy új üres munkalap, vagy pedig a jelenleg használt munkalap.
És hol van az eredeti XLS-be másoló rész? És miért nem egyből oda olvasod a CSV-t?
És miért nem a
Workbooks.OpenText
-et használod a soronkénti olvasgatás és cellába írás helyett? Ez létrehoz egy új munkalapot a CSV tartalmával. De szerintem olyan gyári megoldás is van, ami egyből a kívánt munkalapra (az XLS ugye) importálja az adatokat.
Sub megnyitás()
Dim fileName
fileName = Application.GetOpenFilename("Comma Separated Values (*.csv),*.csv")
If fileName <> "False" Then
Workbooks.Open fileName, Format:=2
End If
' Az előző három sor helyett kellene:
' If fileName = "False" Then Exit Sub
'
' Aztán, ha új munkalapot akarsz, akkor azt kellene létrehozni.
' Vagy, ha az aktuális lapot akarod használni, akkor ki kell deríteni
' a kurzor pozícióját, az utolsó használt sort, vagy bármit, ami után
' a CSV adatai kerülnek, és ezzel kell eltolni később a *number
' értékeit (akkor az Integer típus már nem lesz jó, gondolom, Long
' kell majd).
Dim line As String
Dim arrayOfElements
Dim linenumber As Integer
Dim elementnumber As Integer
Dim element As Variant
' Ezek ide a jelenlegi állapotban nem kellenek, mert a létrehozás után 0-k.
' linenumber = 0
' elementnumber = 0
'
' Ha az XLS munkalapra olvasod a CSV-t, akkor kell:
' linenumber = sor száma
' A CSV első sora ebbe a sorba kerüljön az XLS-ben.
'
' elementnumber = oszlop száma
' Csak akkor kell megadni, ha nem az első oszlopba akarod
' a CSV-ből az első oszlopot. Természetesen akkor a későbbi
' elementnumber = 0-t is erre kell cserélni.
' Open filepath For Input As #1
' Mi a fene az a filepath? fileName, nem?
Open fileName For Input As #1
Do While Not EOF(1)
linenumber = linenumber + 1
Line Input #1, line
arrayOfElements = Split(line, ";") 'A delimiter itt a pontosvessző
elementnumber = 0
' elementnumber = csak akkor kell megadni, ha nem az első oszlopba akarod
' a CSV-ből az adatokat
For Each element In arrayOfElements
elementnumber = elementnumber + 1
Cells(linenumber, elementnumber).Value = element
Next
Loop
Close #1
End Sub
:)
- A hozzászóláshoz be kell jelentkezni
KÖSZÖNÖM
SIKER. Nem tudtam összehozni a kettőt, de ez lett a megoldás. Külön ment mindkettő, de igen ez kllett, hogy amit kiválaszt a user azt használja másoláskor.
Mégegyszer köszönöm.
- A hozzászóláshoz be kell jelentkezni