Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zellen in Textdatei schreiben/lesen, Werte übern.

Zellen in Textdatei schreiben/lesen, Werte übern.
22.05.2013 09:28:18
Ulrich
Hallo liebes Forum =)!
Habe versucht in den letzten Tagen mein Wissen mit VBA zu füllen.
Leider komme ich bei meinen Problemen nicht weiter, hoffe es kann mir jemand helfen.
Folgende Funktionen habe ich eingebaut:
Beim öffnen des Dokument folgt eine Abfrage ob die Daten abgeglichen werden sollen.
Wird die Abfrage mit "Ja" beantwortet, werden alle Zellen aus Spalte A(1) in eine Textdatei geschrieben. Als nächster werden die Log-Datein ausgelesen.
Gibt es eine Möglichkeit doppelte Daten nicht zu übernehmen?
Dannach sollen alle Zellen die ein X enthalten kopiert und als Wert eingefügt werden.
Leider werden die Werte angefügt, möchte diese aber gerne ersetzen.
Vielleicht gibt es auch eine andere Möglichkeit, den Wert einer Formel zu übernehmen.
Vielen Dank im Vorraus =)

Sub workbook_open()
a = MsgBox("Daten abgleichen?", vbYesNo + vbQuestion, "Abfrage")
If a = vbNo Then Exit 

Sub Else
' schreibt alle Zellen aus Spalte A(1) in eine Textdatei
Dim intFF As Integer
Dim iZeile As Integer
Dim strDatei As String
Dim strTemp As String
strDatei = "C:\Test.txt"
intFF = FreeFile
iZeile = 1                                 ' Variable für Zeilennummer
Open strDatei For Output As #intFF      ' Öffnet oder erstellt Textdatei zum  _
hineinschreiben
Do Until Cells(iZeile, 1).Value = ""    ' Schleife: Laufe solange, bis Zelle leer ist
strTemp = Cells(iZeile, 1)              ' Zellwert an Zwischenspeicher übergeben
Print #intFF, strTemp                   ' Zwischenspeicher in TXTDatei schreiben
iZeile = iZeile + 1                     ' Zeilenzähler erhöhen
Loop                                    ' zurück zum Schleifenbeginn
Close #intFF                            ' schließt die Textdatei
'Auslesen der Log-Datei
Dim strPfad As String
Dim FSO As Object
Dim file
Dim lngLR As Long
strPfad = "C:\log\" 'Verzeichnis
Set FSO = CreateObject("scripting.filesystemobject")
For Each file In FSO.getfolder(strPfad).Files
strFileName = file.Name
Sheets("Uebersicht").Select
strDestination = "E" & Cells(Rows.Count, 5).End(xlUp).Row + 1
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & strPfad & strFileName, Destination:=Range(strDestination))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierNone
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Next
Sheets("Tabelle1").Select
'Zeile kopieren wenn Wert in Zelle
Dim i As Long, suchCol As Long
Dim strSearch As String
Dim srcWks As Worksheet, tarWks As Worksheet
'Tabellennamen anpassen
'srcWks wo gesucht werden soll
Set srcWks = Worksheets("Tabelle1")
'tarWks wo hinkopiert werden soll
Set tarWks = Worksheets("Tabelle1")
'6 = Spalte F
suchCol = 6
'strSearch = was gesucht werden soll
strSearch = "X"
With srcWks
For i = 1 To .Cells(Rows.Count, suchCol).End(xlUp).Row
If .Cells(i, suchCol).Text = strSearch Then
Rows(i).Copy Destination:=tarWks.Cells(tarWks.Cells(Rows.Count, 1).End(xlUp). _
Row + 1, 1)
End If
Next i
End With
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen in Textdatei schreiben/lesen, Werte übern.
22.05.2013 10:09:13
fcs
Hallo Ulrich,
Was meinst du mit
Gibt es eine Möglichkeit doppelte Daten nicht zu übernehmen?
?
Wenn du in der Zieltabele Werte überschreiben willst, dann muss du erst prüfen, ob der Begriff bzw. die Begriffe in der Quelltabelle schon in der Zieltabelle in einer Zeile vorhanden sind. Wenn ja, dann Werte überschreiben, wenn nein, dann Quellwerte am Ende der Liste anfügen. Das kann man in einer For-Next-Schleife machen (wenn mehrere Spalten übereinstimmen müssen) oder unter Verwendung der Excel-Suchfunktion (wenn Wert in einer Spalte übereinstimmt).
Nach Klärung der Fragen kann man an die Anpassung des Makros gehen.
Ideal wäre, wenn du eine Beispieldatei mit ggf. anonymisierten Daten hochladen würdest.
Gruß
Franz

Anzeige
AW: Zellen in Textdatei schreiben/lesen, Werte übern.
22.05.2013 11:35:16
Ulrich
Hallo Franz,
danke für deine Antwort =).
"Gibt es eine Möglichkeit doppelte Daten nicht zu übernehmen?"
Die Textdatein werden aus "log" ausgelesen und in die Tabelle "Uebersicht" geschrieben.
Falls der Wert aus einer Textdatei bereits in der Tabelle vorhanden ist, soll er den nächsten nehmen.
Hoffe habe es jetzt besser beschrieben =)
Anbei ein Test-File mit ein paar Werten.
https://www.herber.de/bbs/user/85444.xlsm
Danke
LG
Ulrich

Anzeige
AW: Zellen in Textdatei schreiben/lesen, Werte übern.
22.05.2013 22:39:10
fcs
Hallo Ulrich,
ich hoffe ich hab es verstanden.
Das entfernen doppelte Einträge aus den Logdateien und das Überschreiben der Formeln in Zeilen mit "X" in Spalte F sollte wie folgt funktionieren.
Ich konnte es aber nicht testen, da mir entsprechende Logdateien fehlen.
Gruß
Franz
Sub workbook_open()
a = MsgBox("Daten abgleichen?", vbYesNo + vbQuestion, "Abfrage")
If a = vbNo Then Exit Sub Else
' schreibt alle Zellen aus Spalte A(1) in eine Textdatei
Dim intFF As Integer
Dim iZeile As Long
Dim strDatei As String
Dim strTemp As String
strDatei = "D:\Test.txt"
intFF = FreeFile
iZeile = 1                                 ' Variable für Zeilennummer
Open strDatei For Output As #intFF      ' Öffnet oder erstellt Textdatei zum  _
hineinschreiben
Do Until Cells(iZeile, 1).Value = ""    ' Schleife: Laufe solange, bis Zelle leer ist
strTemp = Cells(iZeile, 1)              ' Zellwert an Zwischenspeicher übergeben
Print #intFF, strTemp                   ' Zwischenspeicher in TXTDatei schreiben
iZeile = iZeile + 1                     ' Zeilenzähler erhöhen
Loop                                    ' zurück zum Schleifenbeginn
Close #intFF                            ' schließt die Textdatei
'Auslesen der Log-Datei
Dim strPfad As String
Dim FSO As Object
Dim file
Dim lngLR As Long, lngZeile1 As Long, lngZeile2 As Long
strPfad = "D:\log\" 'Verzeichnis
Set FSO = CreateObject("scripting.filesystemobject")
For Each file In FSO.getfolder(strPfad).Files
strFileName = file.Name
Sheets("Uebersicht").Select
lngLR = Cells(Rows.Count, 5).End(xlUp).Row
strDestination = "E" & lngLR + 1
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & strPfad & strFileName, Destination:=Range(strDestination))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierNone
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
With Sheets("Uebersicht")
'neue Einträge in Spalte E (5) mit den vorhandenen vergleichen
For Zeile1 = lngLR + 1 To .Cells(.Rows.Count, 5).End(xlUp).Row
For Zeile2 = 1 To lngLR
If .Cells(Zeile1, 5).Value = .Cells(Zeile2, 5).Value Then
.Cells(Zeile1, 5).ClearContents
Exit For
End If
Next Zeile2
Next Zeile1
'leerzellen von unten auffüllen
For Zeile1 = lngLR + 1 To .Cells(.Rows.Count, 5).End(xlUp).Row
If IsEmpty(.Cells(Zeile1, 5)) Then
Zeile2 = Zeile1
Do
Zeile2 = Zeile2 + 1
If .Cells(Zeile2, 5)  "" Then
.Cells(Zeile1, 5).Value = .Cells(Zeile2, 5).Value
.Cells(Zeile2, 5).ClearContents
Exit Do
End If
If .Cells(.Rows.Count, 5).End(xlUp).Row = Zeile1 Then Exit Do
Loop
End If
Next Zeile1
End With
Next
Sheets("Tabelle1").Select
Dim i As Long, suchCol As Long
Dim strSearch As String
Dim srcWks As Worksheet, tarWks As Worksheet
'Tabellennamen anpassen
'srcWks wo gesucht werden soll
Set srcWks = Worksheets("Tabelle1")
'tarWks wo hinkopiert werden soll
Set tarWks = Worksheets("Tabelle1")
'6 = Spalte F
suchCol = 6
'strSearch = was gesucht werden soll
strSearch = "X"
With srcWks
For i = 1 To .Cells(Rows.Count, suchCol).End(xlUp).Row
If .Cells(i, suchCol).Text = strSearch Then
.Rows(i).Copy
tarWks.Rows(i).PasteSpecial Paste:=xlPasteValues
End If
Next i
End With
End Sub

Anzeige
AW: Zellen in Textdatei schreiben/lesen, Werte übern.
23.05.2013 10:20:33
Ulrich
Hallo Franz,
vielen, vielen Dank, es funktioniert =).
Habe jetzt noch ein Problem mit dem Sverweis, dass werde ich noch hinbiegen =).
Hoffe ich werde VBA irgendwann verstehen =)
LG
Ulrich
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zellen in eine Textdatei schreiben und Werte übergeben


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke auf Einfügen und wähle Modul.

  3. Code eingeben: Füge den folgenden Code ein, um die Zellen aus Spalte A in eine Textdatei zu schreiben:

    Sub workbook_open()
       a = MsgBox("Daten abgleichen?", vbYesNo + vbQuestion, "Abfrage")
       If a = vbNo Then Exit Sub
    
       Dim intFF As Integer
       Dim iZeile As Integer
       Dim strDatei As String
       Dim strTemp As String
       strDatei = "C:\Test.txt" ' Dateipfad anpassen
       intFF = FreeFile
       iZeile = 1
    
       Open strDatei For Output As #intFF
       Do Until Cells(iZeile, 1).Value = ""
           strTemp = Cells(iZeile, 1)
           Print #intFF, strTemp
           iZeile = iZeile + 1
       Loop
       Close #intFF
    End Sub
  4. Log-Dateien auslesen: Ergänze den Code, um die Log-Dateien auszulesen und in die Tabelle „Uebersicht“ zu schreiben. Achte darauf, die Dateipfade korrekt anzupassen.

  5. Werte überschreiben: Verwende eine Schleife, um zu prüfen, ob der Wert bereits in der Zieltabelle vorhanden ist. Wenn ja, überschreibe den Wert:

    For Zeile1 = lngLR + 1 To .Cells(.Rows.Count, 5).End(xlUp).Row
       For Zeile2 = 1 To lngLR
           If .Cells(Zeile1, 5).Value = .Cells(Zeile2, 5).Value Then
               .Cells(Zeile1, 5).ClearContents
               Exit For
           End If
       Next Zeile2
    Next Zeile1

Häufige Fehler und Lösungen

  • Fehler beim Schreiben in die Textdatei: Stelle sicher, dass der angegebene Dateipfad existiert und Du die erforderlichen Berechtigungen hast.
  • Doppelte Daten: Wenn Du doppelte Werte nicht in die Zieltabelle übernehmen möchtest, überprüfe, ob der Wert bereits vorhanden ist, bevor Du ihn hinzufügst.
  • Formeln nicht überschreiben: Um Formeln in Zellen mit „X“ in Spalte F zu überschreiben, nutze PasteSpecial:

    tarWks.Rows(i).PasteSpecial Paste:=xlPasteValues

Alternative Methoden

  • Power Query: Statt VBA kannst Du auch Power Query verwenden, um Daten aus einer Textdatei zu importieren und zu transformieren. Dies ist besonders nützlich, wenn Du häufig Daten aktualisieren musst.
  • Makros aufzeichnen: Nutze die Makroaufzeichnung, um eine Routine zu erstellen, die Daten in eine Textdatei schreibt. Dies ist eine einfache Möglichkeit, wiederkehrende Aufgaben zu automatisieren.

Praktische Beispiele

  • Beispiel für das Schreiben in eine Textdatei:

    Sub WriteToTextFile()
       Dim intFF As Integer
       Dim strDatei As String
       strDatei = "C:\Data.txt"
       intFF = FreeFile
    
       Open strDatei For Output As #intFF
       Print #intFF, "Beispieltext"
       Close #intFF
    End Sub
  • Beispiel für das Auslesen von Log-Dateien:

    ' Log-Dateien in Tabelle importieren
    For Each file In FSO.getfolder(strPfad).Files
       ' Dein Importcode hier
    Next

Tipps für Profis

  • Verwende Fehlerbehandlung in Deinem VBA-Code, um unerwartete Probleme zu vermeiden. Nutze On Error Resume Next oder On Error GoTo ErrorHandler.
  • Kommentiere Deinen Code, um die Lesbarkeit zu verbessern und anderen (oder Dir selbst in der Zukunft) das Verständnis zu erleichtern.
  • Teste Deinen Code regelmäßig, um sicherzustellen, dass alles wie gewünscht funktioniert, insbesondere nach Änderungen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass keine doppelten Werte in die Textdatei geschrieben werden?
Du kannst eine Überprüfung implementieren, bevor Du einen neuen Wert hinzufügst, indem Du die Zieltabelle nach dem Wert durchsuchen lässt.

2. Wie kann ich VBA in Textdateien schreiben?
Du kannst die Open, Print und Close Befehle verwenden, um Daten in eine Textdatei zu schreiben. Achte darauf, dass der Pfad zur Datei korrekt ist.

3. Wo finde ich die Log-Dateien?
Log-Dateien sollten in dem Verzeichnis sein, das Du im Code angegeben hast (strPfad). Stelle sicher, dass dieses Verzeichnis existiert und die Dateien die erwarteten Daten enthalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige