Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabelleninhalt in Txt-Datei kopieren

Tabelleninhalt in Txt-Datei kopieren
03.03.2023 09:15:51
infostud
Hallo liebe Community,
ich bin echt ein newbie in dem Bereich VBA und Excel. Daher hoffe ich mich hier verständlich ausdrücken zu können und Hilfe zu erhalten.
Folgendes Szenario soll sich bei mir abspielen:
Ich bekomme eine Excel-Datei mit mehreren Tabellenblättern, die Struktur der Tabellenblätter sind ähnlich.
Wichtig ist der Inhalt von C5 bis CBx (es kann sein, dass es nur 3 Zeilen sind oder über 30, irgendwie muss ich hier auch abfangen, dass,
wenn nächste zeile leer,
wenn nächste zeile in CB kein H enthält
dann nächstes Tabellenblatt
Nun möchte ich den Inhalt der Tabellenblätter hintereinander in eine einzelne Textdatei kopieren.
Was ich schon kann:
Per Knopfdruck (Makro), kann ich mir die Datei in meine Excel holen mit den mehreren Tabellenblättern. (Vielleicht kann man diesen Schritt auch einfacher oder sogar ganz weglassen, weiß ich nicht)
Ich freue mich auf jeden Fall auf Tipps und Unterstützung.
MfG infostud

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Datei hochladen! owT
03.03.2023 11:06:48
Yal
AW: Tabelleninhalt in Txt-Datei kopieren
06.03.2023 08:26:36
infostud
Hallo zusammen,
anbei sende ich ein Beispieldokument.
Das Ziel hier ist es, alle 3 Tabellenblätter zusammenzuführen wie oben beschrieben, d.h. die Inhalte von C5 bis CBxx (letzte Zeile mit H) hintereinander in einer Textdatei abspeichern.
https://www.herber.de/bbs/user/158125.xlsx
Viele Grüße
infostud
AW: Tabelleninhalt in Txt-Datei kopieren
06.03.2023 12:31:35
Yal
Hallo Infostud,
ohne das gesamt zu sehr zu hinterfragen:
Sub DatenInsDatei()
Dim Z As Long
Dim ws As Worksheet
Dim Erg As String
    For Each ws In Workbooks("158125.xlsx").Worksheets
        For Z = 5 To ws.Cells(Rows.Count, "B").End(xlUp).Row
            If ws.Cells(Z, "C") = "" Then Exit For
            Erg = Erg & vbLf & Join(Application.Transpose(Application.Transpose(ws.Rows(Z).Range("C1:CD1"))), ";")
        Next Z
    Next ws
    
    Open "C:\temp\Datei_20230306.txt" For Output As #1   ' Ausgabedatei - anpassen
    Print #1, Mid(Erg, Len(vbLf) + 1) 'ohne führende vbLf
    Close #1
End Sub
Es ist aber wie immer, wenn man einen Code jemand übergibt, der keine Ahnung hat: VBA ist keine gedankenlesende Zauberstab. Diese Lösung wird nur solang funktionieren, bis eine Voraussetzung sich ändert. Wenn Du bis dahin Dir nicht das minimale Wissen eingeeignet hast, um den Code selber anzupassen, bist Du von fremder Hilfe abhängig.
Ich würde keinen "Knopf" verwenden oder sonstige Gedönz, die man zusätzlich aufrecht erhalten muss, sondern mit Alt+F8 das Makro starten.
VG
Yal
Anzeige
AW: Tabelleninhalt in Txt-Datei kopieren
06.03.2023 14:24:41
infostud
Hallo,
ich bin ja dabei es etwas zu erlernen, habe aber leider noch große Lücken, da ich noch am Anfang bin.
Kann nur durch üben lernen.
Herzlichen Dank für deinen Code.
Die ";" sind hier Fehl am Platz, wenn ich dies durch ein Leerzeichen ersetze, erhalte ich auch nicht das gewünschte Ergebnis.
Dachte mir daher noch eine weitere If-Schleife wäre gut.....
so möchte ich die Formatierung haben.... Die letzte Zahl rechts sollte rechtsbündig sein.... (ich hoffe das wird hier richtig dargestellt)
100305893020                  1                           2558785732         
100305893070                  1                            488364945         
100319883110                  1                           5808799838         
100459427000                  1                           7009437719         
100459882000                  1                            313089520         
100459684000                  1                              9555928  -      
100705538070                  1                             15000000         
100705686120                  1                           1222972648         
100705538110                  1                            233431965     
Dazu dachte ich an folgenden Code, der etwas wabbelig ist:
Sub DatenInsDatei()
Dim Z As Long
Dim ws As Worksheet, a As Variant
Dim merk(60) As Variant
Dim ind1, ind2 As Integer
Dim Erg As String
Application.ScreenUpdating = False
Z = 0
s = 0
ind1 = 0
ind2 = 0
    For Each ws In Workbooks("TextdateiErstellen.xlsm").Worksheets
      
    With ws
        If .Value > "H" Then
                a = .Value
           If .Value = "" Then
                a = " "
           End If
        c = c & a
        End If
        If .Value = "H" Then
                ind1 = ind1 + 1
                ind2 = ind2 + 1
                merk(ind1) = c
                c = ""
        End If
        
     End With
   
   Next ws
   
   Worksheets("Tabelle2").Activate
   Range("A1").Select
   ActiveSheet.Cells.ClearContents
   
   ind1 = 1
   For i = 1 To ind2
        ActiveCell.Offset(Z, s).Value = merk(ind1)
        ind1 = ind1 + 1
        Z = Z + 1
   Next i
        
        
habe noch Verständnisprobleme. mit .Value möchte ich auf einzelne Zellen greifen.... klappt hier aber nicht.... Muss ich es anders aufrufen?
Viele Grüße
infostud
Anzeige
AW: Tabelleninhalt in Txt-Datei kopieren
06.03.2023 19:55:38
Yal
hallo Infostud,
Du musst dich mit dem Datenmodell von Excel vertraut machen. Es geht am einfachsten im Objekt-Katalog (Ansicht, Objekt katalog).
Zum Beispiel, ein Worksheet kann nur ein Unterobjekt von Workbook sein. Value ist eine Eigenschaft einer einzigen Zelle. D.h. wenn Du ".Value" hast, muss davor einen "With xx", bei dem xx eine einzige Zelle ist.
Worksheets ist der Sammlung aller Worksheets im Workbook. Darauf kann man einen "For Each" setzen. Sonst müsste man:
For i = 1 to worksheets.count
   Set ws = worksheets(i)
Um den Leerzeichen zu haben, wenn nichts, kann man den Trick benutzen, einen Leerzeichen hinten hinzufügen und immer nur die erste Stelle zu nehmen.
Sub DatenInsDatei()
Dim ws As Worksheet
Dim R As Long ' R für Row
Dim C As Long ' C für Column
Dim Erg As String
    Open "C:\temp\Datei_20230306.txt" For Output As #1   ' Ausgabedatei - anpassen
    For Each ws In Workbooks("158125.xlsx").Worksheets
        For R = 5 To ws.Cells(Rows.Count, "B").End(xlUp).Row ' Für Zeile 5 bis letztbefüllte in Spalte B
            If ws.Cells(R, "C") = "" Then Exit For 'wenn Zelle in Spalte "C" der aktuelle Zeile R
            Erg = ""
            For C = 3 To 75
                Erg = Erg & Left(ws.Cells(R, C) & " ", 1)
            Next
            Print #1, Erg
        Next
    Next
    Close #1
End Sub
VG
Yal
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige