1k Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (481 Punkte)
Hallo,

ich führe wöchentlich Daten mit gleichen Überschriften zusammen.

Die Ursprungsdatei ist eine Textdatei - ich importiere also nach Excel und kopiere dann manuell die Liste in eine Zusammenstellung mit allen Daten.

Lässt sich ein Import in die Zusammenstellung bewerkstelligen - wobei die Daten unten angefügt werden sollen.

8 Antworten

0 Punkte
Beantwortet von
Hallo Happy,

das kommt darauf, an welches Format deine Textdatei hat (txt, csv, Deutsch, englisch, ASCII, ANSI etc.)

sind in der Textdatei auch Überschriften, und sind die Spalten gleich angeordnet, wie in deiner Liste? Gibt es Sonderspalten mit führenden Nullen (PLZ, Telefonnr.)

Möchtest du den Import über ein Symbol auslösen, oder per Doppelklick auf deine Zieldatei im Explorer?

Es gibt viele Möglichkeiten. Wie hättest du's denn gern?
0 Punkte
Beantwortet von Mitglied (481 Punkte)
Hallo,

danke erst mal für die Antwort. Also es geht um eine *.txt Datei, die immer gleich angeordnet ist.
Zeilen mit Sonderformaten gibt es auch (führende Nullen).

Wie der Import funktioniert ist für mich zweitrangig - Symbol oder automatisch beim öffnen...

VG
Matthias
0 Punkte
Beantwortet von
Hallo Happy,

da du immer noch nichts über die Formatierung deiner Tabelle
verrätst fällt es mir schwer dir hier eine auf dich zugeschnittene
Lösung anzubieten. Generell ist Alles möglich, nur soll es ja deiner
Vorstellung entsprechen.

Hier mal ein Beispiel: Angenommen die Tabelle befindet sich im
Blatt "Tabelle1" und hat die erste Spalte in Spalte A. Außerdem
muss die Anzahl der Spalten, sowie deren Datentypen (Text, Zahl,
Datum etc.) den Informationen in der Textdatei gleichen. Falls dem
so ist kannst du folgenden Code in das Modul "DieseArbeitsmappe"
legen.

Private Sub Workbook_Open()

dezimaltrennzeichen = ","
Blatt = "Tabelle1"
ErsteTabellenspalte = "A"

Spaltenformate = Array(1, 1, 1, 1, 1, 1, 1, 2, 2, 1)


frage = MsgBox("Möchten Sie eine neue Datei anfügen?", vbYesNo
+ vbQuestion, "Liste fortführen")

Sheets(Blatt).Select
If frage = vbYes Then

Pfad = "E:\MeineTabellen\Adressen.txt"

Set r = Range(ErsteTabellenspalte &
Rows.Count).End(xlUp).Offset(1, 0)

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Pfad _
, Destination:=r)
'.Name = "Adressen"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Spaltenformate
.TextFileDecimalSeparator = dezimaltrennzeichen
.TextFileThousandsSeparator = IIf(dezimaltrennzeichen = ",", ".",
",")
.Refresh BackgroundQuery:=False
End With
r.Select
r.EntireRow.Delete
End If

End Sub

Die ArrayFunktion gibt hier die Datentypen der Spalten an. 1 steht für
das Automatische ob Text oder Zahl, 2 steht für Text. Alle Spalten mit
führenden Nullen solltest du als Text kennzeichnen, sofern du nicht
damit rechnen willst, oder als Zahl, falls du damit rechnen willst. In
letzerem Fall sollte aber die gesamte Spalte zuvor mit einem
benutzerdefinierten Zahlenformat wie "00000" formatiert sein.
Anstelle der Zahlen 1 und 2, kannst du auch die exceleigenen
TypVariablen verwenden

[list=1]
[*]
[*] xlGeneralFormat - Standard
[*] xlTextFormat - Text
[*] xlMDYFormat - Datum im Format MTJ
[*] xlDMYFormat - Datum im Format TMJ
[*] xlYMDFormat - Datum im Format JMT
[*] xlMYDFormat - Datum im Format MJT
[*] xlDYMFormat - Datum im Format TJM
[*] xlYDMFormat - Datum im Format JTM
[*] xlSkipColumn - Spalte überspringen
[*] xlEMDFormat - Datum im EMD-Format
[/list]
Gruß Mr. K.
0 Punkte
Beantwortet von
OK, das mit der Listendarstellung hat nicht so funktioniert, wie in der Hilfe
beschrieben. Also nochmal:

[list=1]xlGeneralFormat - Standard
[*]xlTextFormat - Text
[*]xlMDYFormat - Datum im Format MTJ
[*]xlDMYFormat - Datum im Format TMJ
[*]xlYMDFormat - Datum im Format JMT
[*]xlMYDFormat - Datum im Format MJT
[*]xlDYMFormat - Datum im Format TJM
[*]xlYDMFormat - Datum im Format JTM
[*]xlSkipColumn - Spalte überspringen
[*]xlEMDFormat - Datum im EMD-Format [/list]
0 Punkte
Beantwortet von
Ey sach ma, will das System mich hier veralbern? Letzter Versuch:

[list=1]
[*]xlGeneralFormat - Standard
[*]xlTextFormat - Text
[*]xlMDYFormat - Datum im Format MTJ
[*]xlDMYFormat - Datum im Format TMJ
[*]xlYMDFormat - Datum im Format JMT
[*]xlMYDFormat - Datum im Format MJT
[*]xlDYMFormat - Datum im Format TJM
[*]xlYDMFormat - Datum im Format JTM
[*]xlSkipColumn - Spalte überspringen
[*]xlEMDFormat - Datum im EMD-Format[/list]

Aber ich denke du hast die Numerische Reihenfolge verstanden :)
0 Punkte
Beantwortet von
Die umgebrochenen Code-Zeilen gehören natürlich hintereinander in eine
Zeile. Das der Code hier beim Einfügen immer automatisch umgebrochen
wird, geht mir langsam echt auf die Nerven.
0 Punkte
Beantwortet von Mitglied (481 Punkte)
Hallo,

danke erst mal. Leider fehlen mir die VBA Kenntnisse (sind nur rudimentär); inzwischen konnte ich allerdings eine Lösung finden.

Allerdings: Beim Import kann ich jetzt nicht mehr die Wahl im Textkonvertierungsassistenten treffen -> Dateiursprung (UTF-8).

Jetzt werden die Sonderzeichen nicht mehr korrekt dargestellt :)

Kann mir vielleicht jemand helfen und mit sagen, wie die sich die Konvertierung in das Makro einbauen lässt?

-----------------------------------------------------
folgendes VBA Modul funktioniert:

Sub Open_TextFile_DE()
'
'
Dim varDateiName As Variant, arrFieldInfo() As Long, intSpalte As Integer
varDateiName = Application.GetOpenFilename(Filefilter:="Textfile (*.txt),*.txt", _
Title:="Bitte Textdatei mit Daten auswählen")
If varDateiName = False Then Exit Sub
intSpalte = 6 'Anzahl Spalten in Textdatei - sind mehr Spalten enthalten, dann werden _
diese als Standard importiert.
ReDim arrFieldInfo(1 To intSpalte, 1 To 2)
'Erstellung des FieldInfo-Arrays für die Spaltenformate
For intSpalte = 1 To UBound(arrFieldInfo, 1)
arrFieldInfo(intSpalte, 1) = intSpalte
Select Case intSpalte
Case 1
arrFieldInfo(intSpalte, 2) = 2 'Import als Text
Case 2
arrFieldInfo(intSpalte, 2) = 3 'Datum MTJ, z.B. US MM/TT/JJJJ
Case 4
arrFieldInfo(intSpalte, 2) = 4 'Datum TMJ, z.B. DE TT.MM.JJJJ
Case 3
arrFieldInfo(intSpalte, 2) = 5 'Datum JMT, z.B. ISO JJJJ-MM-TT
Case 999
arrFieldInfo(intSpalte, 2) = 9 'Spalte nicht importieren
Case Else 'Import als Standard - Excel für Konversionen automatisch durch
arrFieldInfo(intSpalte, 2) = 1 'Import als Standard - Excel für Konversionen _
automatisch durch
End Select
Next intSpalte

Application.Workbooks.OpenText Filename:=varDateiName, Origin:=xlWindows, Startrow:=1, _
DataType:=xlDelimited, Textqualifier:=xlTextQualifierDoubleQuote, _
Consecutivedelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
Other:=False, Fieldinfo:=arrFieldInfo, _
DecimalSeparator:=",", ThousandsSeparator:=".", Trailingminusnumbers:=True
End Sub
0 Punkte
Beantwortet von
Hallo Happy,

ersetze den Teil Origin:=xlWindows durch Origin:=65001

das steht für UTF-8

Gruß Mr. K.
...