Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1312to1316
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

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

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

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

362 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige