Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

TXT-Datei importieren / Zellenformat

Betrifft: TXT-Datei importieren / Zellenformat von: Selma
Geschrieben am: 27.11.2020 22:50:53

Hallo Leute,

ich habe eine XLSX-Datei, in der ich in der Zeile 6 die Spalten gewünscht formatiert (Textausrichtung, Farben, Schriftgröße, mache Zellen als Zahl oder Text) habe. Soweit alles in Ordnung.

Wie kann ich bitte per VBA die Inhalte einer TXT-Datei (ab der Zeile 9 bis vorletzter Zeile) in das Exceldokument spaltenweise ab Zelle A6 importieren? Die Inhalte in der Textdatei sind durch ein Semikolon getrennt.

Wichtig: Die Zeile 6 in XLSX soll für die nachfolgende Zeile von der Formatierung her übernommen werden.

Herzlichen Dank im Voraus!

Liebe Grüße
Selma

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Tino
Geschrieben am: 28.11.2020 01:36:18

Hallo,
hier mal eine Variante zum testen.
Die Textdatei wird über ein Dialog erfasst.
Sub ImportTxT()
Dim sFile$, sInhalt$, varInhalt, varRowTxT, ArAusgabe()
Dim c&, r&, F%

'Import ab Zeile
Const AbZeile& = 9

'Auswahl Textfile
sFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If sFile = CStr(False) Then Exit Sub

'Textfile einlesen
F = FreeFile
Open sFile For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close

'Text in Zeilen aufteilen
varInhalt = Split(sInhalt, vbCrLf)
If UBound(varInhalt) < AbZeile - 1 Then Exit Sub 'keine Zeile 9
sInhalt = ""
  
'Größe Ausgabe Array
ReDim Preserve ArAusgabe(1 To UBound(varInhalt) - AbZeile + 2, 1 To 1)

'Zeilen durchlaufen
For r = AbZeile - 1 To UBound(varInhalt)
    varRowTxT = Split(varInhalt(r), ";")
    For c = 0 To UBound(varRowTxT)
        'zweite Dimention vom Array
        If UBound(ArAusgabe, 2) < c + 1 Then _
            ReDim Preserve ArAusgabe(1 To UBound(ArAusgabe), 1 To c + 1)
            
        If varRowTxT(c) <> "" Then
            'Text-Zahlen in Zahl wandeln
            If IsNumeric(varRowTxT(c)) Then
                ArAusgabe(r - 7, c + 1) = varRowTxT(c) * 1
            Else
                ArAusgabe(r - 7, c + 1) = varRowTxT(c)
            End If
        End If
    Next
Next

Application.ScreenUpdating = False
Application.EnableEvents = False

With Tabelle1 'Ausgabe Tabelle
    .Rows(6).ClearContents 'Inhalt löschen
    .Range("A7", .Cells(.Rows.Count, 1)).EntireRow.Delete 'alles löschen
    With .Range("A6").Resize(UBound(ArAusgabe), UBound(ArAusgabe, 2))
        .Value = ArAusgabe
        If .Rows.Count > 1 Then
            .Rows(1).Copy
            .Rows(2).Resize(.Rows.Count - 1).PasteSpecial xlPasteFormats
            Application.CutCopyMode = False
        End If
    End With
    Application.Goto .Cells(1, 1), True
End With

Application.ScreenUpdating = True
Application.EnableEvents = True

MsgBox "Import abgeschlossen!", vbInformation
End Sub
Gruß Tino

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Selma
Geschrieben am: 28.11.2020 12:00:36

Einen wunderschönen Tag Tino,

zunächst vielen herzlichen Dank für dein Makro, das hilft mir sehr weiter.

Folgende Fragen noch:
1. Wie kann ich bitte einstellen, dass aus der Textdatei von unten aus gesehen, die letzte oder vorletzte Zeile, die in der Regel mit [/Komponenten] endet nicht importiert wird. Diese Zeile beginnt immer mit [/ der Inhalt danach kann abweichen.

2. In der Textdatei in der Zeile die importiert wird steht z.B. eine ID-Nummer wie hier 10068028464992419636 diese wird nach dem Import als 1,0068E+19 angezeigt und in der Bearbeitungszeile in Excel als dies 10068028464992400000. Ich habe die Zelle in Excel als Text formatiert. Das hat nicht geholfen. Evtl. muss ich erstmal alles als Text importieren und dann die Formatierung der Zeile 6 an alle anderen Zeilen übertragen, oder?

3. Die Werte, die in der TXT-Datei vorne Nullen Bsp. 008 haben, werden als 8 importiert.

Lässt sich dies bitte noch beim Import berücksichtigen?

Liebe Grüße,
Selma

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Tino
Geschrieben am: 28.11.2020 13:00:05

Hallo,
zu erstens kannst du Mal so versuchen.
In der Zeile For r, am Ende -1 dazu schreiben.

Zu 2. u. 3.
es liegt daran das alles was wie eine Zahl aussieht in eine Zahl umgewandelt wird.
Mach Mal aus der Zeile
ArAusgabe(r - 7, c + 1) = varRowTxT(c) * 1
dieses * 1 raus.

Sollte es nicht gehen, bräuchte ich eine Bsp. Textfile zum testen.

Gruß Tino

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Selma
Geschrieben am: 28.11.2020 13:54:02

Hallo lieber Tino,

zu 1: das hat funktioniert. Ich müsste genau überprüfen, ob es -1 oder mehr sind, da die leeren Zeilen am Ende der Textdatei mitgezählt werden. :-) Gerne hätte ich dies dynamisch abgefangen, wenn am Ende dies [/ vorkommt, dann ist dort die Ende (minus diese Zeile). Aber ich kann damit leben, wie es jetzt ist.

zu 2 und 3: Jetzt habe ich so eingetragen: ArAusgabe(r - 7, C + 1) = varRowTxT(C) . Das hat für die Texte bezüglich Nullen erstmal funktioniert, aber nicht für bereits formatierte Zelle als Zahl. Ich meine, dass die Zellen, die vorher wirklich als Zahl formatiert sind mit *1 abgearbeitet werden müssen, oder?

Anbei eine Testdatei XLSM (letzte Fassung) und die dazugehörige TXT-Datei:
https://www.herber.de/bbs/user/141903.xlsm
https://www.herber.de/bbs/user/141904.txt

Liebe Grüße,
Selma

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Tino
Geschrieben am: 28.11.2020 16:15:29

Hallo,
kannst mal testen.

https://www.herber.de/bbs/user/141907.zip

Gruß Tino

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Tino
Geschrieben am: 28.11.2020 16:18:24

Hallo,
mach das -4 bei UBound(varInhalt) - 4 noch einmal raus!

Gruß Tino

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Tino
Geschrieben am: 28.11.2020 16:22:31

Hallo,
und noch bei
.Rows(2).Resize(.Rows.Count - 5).PasteSpecial xlPasteFormats
aus der -5 ein -1 machen!

Gruß Tino

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Selma
Geschrieben am: 28.11.2020 18:09:53

Hallo Tino,

vielen herzlichen Dank. Das sieht perfekt aus!

Kurze Frage noch: Lässt sich das Wort Komponenten als Wildcard schreiben, weil dies in anderen Dateien anders heißt. Ich habe wie folgt ohne Erfolg getestet ;-)
If InStr(1, varInhalt(n), Like "[/*]", vbTextCompare) > 0 Then
Liebe Grüße,
Selma

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Tino
Geschrieben am: 28.11.2020 18:36:55

Hallo,
versuche es so

If varInhalt(n) Like "[/*]" Then

Gruß Tino

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Selma
Geschrieben am: 28.11.2020 19:22:47

Hallo Tino,

ich habe es versucht. Es hat nicht funktioniert.

Liebe Grüße,
Selma

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Tino
Geschrieben am: 28.11.2020 20:49:19

Hallo,
melde mich später nochmal bin gerade noch am Rechner.

Gruß Tino

Betrifft: AW: TXT-Datei importieren / Zellenformat
von: Selma
Geschrieben am: 28.11.2020 21:13:29

Hallo Tino,

ich habe es so geschafft:
If Left(varInhalt(n), 2) = "[/" Then
Liebe Grüße,
Selma

Beiträge aus dem Excel-Forum zum Thema "TXT-Datei importieren / Zellenformat"