Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Datenimport via VBA

92 views
Skip to first unread message

Markus

unread,
Jun 10, 2003, 4:32:44 AM6/10/03
to
Ich habe leider 0 Ahnung von Visual Basic :( und habe
daher folgendes Problem:
In einer Excel Mappe befinden sich 2 Tabellen. Eine 3.
Tabelle soll über ein Makro in dieselbe Mappe importiert
werden (aus einer .txt Textdatei). Wird die Excel Datei
nun aber geöffnet und die Makros aktiviert, öffnen sich
zuerst ganz normal die beiden Tabellen, werden aber gleich
wieder geschlossen und in eine neue Mappe werden die Daten
der Textdatei importiert.
Ergebnis: Ich habe eine neue Mappe, jedoch nur mit der
Tabelle aus den Daten der Textdatei. Tabelle 1 und 2 [die
die 3. importierte Tabelle auswerten sollen] wurden
geschlossen.
Werden die Makros nicht aktiviert, werden Tabelle 1 und 2
normal angezeigt.
Kann mir einer von euch Visual Basic Könnern folgenden
Makro umschreiben, damit am Ende alle 3 Dateien in einer
Mappe vorhanden sind? Ich bin mir sicher, dass nur ein
paar Zeilen geändert werden müssen. Wäre echt super!!!

mfg

Markus
============
Makro (bestehend aus 2 Modulen):

-Modul "DateiImport":

Sub DatenImport()

SheetsInNewWorkbook = 1
Application.Workbooks.OpenText
Filename:="C:\TEMP\EXCEL.TXT", _
DataType:=xlDelimited, _

TextQualifier:=xlTextQualifierDoubleQuote, _
Tab:=True

Call Format
Application.ActiveWorkbook.ActiveSheet.Copy
Application.Workbooks(2).Close False
Application.Workbooks(1).Close False

End Sub

Sub Auto_Open()

Call DatenImport

End Sub

--------------------

-Modul "Modul1":

Sub Format()

Rows("1:1").Select
Selection.Font.Bold = True
Selection.Font.ColorIndex = 5
Selection.Columns.AutoFit
End Sub

Thomas Annen

unread,
Jun 10, 2003, 5:34:55 AM6/10/03
to
Hallo,
das klappt am sichersten, indem in der Zieltabelle
ein "Query-Table"-Objekt eingefügt wird, entspechend dem
Menübefehl "Daten - Externe Daten", das geht
folgendermaßen in die Tabelle mit Namen "Temp":

Die While-Schleife macht das mit jeder "csv-Datei" im
Verzeichnis:

Private Sub Dateneinlesen_Click()
Verzeichnis = ThisWorkbook.Path
Zieldatei = ActiveWorkbook.Name
Zielblatt = ActiveSheet.Name
ZuImportierendeDatei = Dir(Verzeichnis & "\*.csv")
While ZuImportierendeDatei <> ""
Set ws = Worksheets("Temp")
Set qt = ws.QueryTables.Add _
(Connection:="Text;" _
+ Verzeichnis & "\" + ZuImportierendeDatei, _
Destination:=ws.[A1])
With qt
.Name = ZuImportierendeDatei
.FieldNames = True
.RowNumbers = False
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlMSDOS
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
...
wend
End Sub

Gruß
Thomas

Markus

unread,
Jun 10, 2003, 8:43:06 AM6/10/03
to
Hallo Thomas!
Erst einmal vielen Dank für deine Bemühungen.
Ich habe nun den von dir beschriebenen code angepasst.
Allerdings mag er die letzte Zeile noch nicht (".Refresh
BackgroundQuery:=False").
Denn wenn ich die Datei ausführe, kommt
ein "Laufzeitfehler 1004. Excel kann die Textdatei für die
Aktualisierung des externen Datenbereichs nicht finden".
Wenn ich nun auf debuggen klicke, markiert er mir die
letzte Zeile: .Refresh BackgroundQuery:=False
Was muss ich daran noch ändern, damit der makro läuft?
Hier der bisherige code:

Private Sub Dateneinlesen_Click()
Verzeichnis = ThisWorkbook.Path
Zieldatei = ActiveWorkbook.Name
Zielblatt = ActiveSheet.Name

ZuImportierendeDatei = Dir("C:\Temp\excel.txt")
While ZuImportierendeDatei <> ""
Set ws = Worksheets("excel")


Set qt = ws.QueryTables.Add _
(Connection:="Text;" _
+ Verzeichnis & "\" + ZuImportierendeDatei, _
Destination:=ws.[A1])
With qt
.Name = ZuImportierendeDatei
.FieldNames = True
.RowNumbers = False
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlMSDOS
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False

End With

Wend
End Sub

Gruß
Markus

Markus

unread,
Jun 11, 2003, 4:34:11 AM6/11/03
to
ok, Problem gelöst, Formel läuft :)
[leider kann man hier keine posts editieren, sry wegen den
beiden post hintereinander)
cya
0 new messages