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

Problem beim txt zusammenführen mit Makro

Problem beim txt zusammenführen mit Makro
26.06.2016 10:29:19
Mirjam
Hallo zusammen
ich möchte mit einem VBA-Code folgendes Ziel erreichen:
- mehrere txt-Dateien auf einmal in Excel einlesen
- Inhalt der txt-Dateien (mehrere Spalten) in ein gemeinsames Tabellenblatt schreiben
- Inhalt der txt-Dateien nebeneinander anordnen
Ich habe dazu einen Code im Internet gefunden, der ursprünglich für folgendes Ziel geschrieben war:
- Einlesen und Zusammenführen mehrerer xls
- Inhalte der xls untereinander angeordnet
Mittlerweile konnte ich den Code so modifzieren, dass er für die spaltenweise Anordnung der Dateien funktioniert. Allerdings werden durch Anwenden des Programm-Codes, die Kommazahlen ab einem Wert größer 1 nicht mehr als Zahl erkannt. Könnt ihr mir helfen und mir einen Tipp geben, was ich noch ändern muss?
Vielen Dank! Ich wünsche einen sonnigen Sonntag...
Option Explicit
Public Sub Daten_mehrerer_Dateien_zusammenfuehren()
'Code für ein allgemeines Modul
'Autor: Jürgen Hennekes
On Error GoTo errExit
Dim WBQ As Workbook
Dim WBZ As Workbook
Dim varDateien As Variant
Dim lngAnzahl As Long
Dim lngLastQ As Long
Dim lngRightQ As Long
Dim lngInc As Long
Dim RngToCopy As Range
Dim DestCell As Range
Set WBZ = ActiveWorkbook
'Altdaten auf Zielblatt löschen
WBZ.Worksheets(1).Range("A1:IV65536").ClearContents
varDateien = _
Application.GetOpenFilename("Datei (*.txt),*.txt", False, "Bitte gewünschte Datei(en) markieren" _
_
, False, True)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
lngInc = 0
For lngAnzahl = LBound(varDateien) To UBound(varDateien)
Set WBQ = Workbooks.Open(Filename:=varDateien(lngAnzahl))
lngRightQ = WBZ.Worksheets(1).Cells(40, Columns.Count).End(xlToLeft).Column
lngLastQ = WBQ.Worksheets(1).Range("E65536").End(xlUp).Row
If lngAnzahl > 1 Then lngInc = 2
Set RngToCopy = WBQ.Worksheets(1).Range("A1:Z" & lngLastQ)
Set DestCell = WBZ.Worksheets(1).Cells(1, lngRightQ + lngInc)
DestCell.Resize(RngToCopy.Rows.Count, RngToCopy.Columns.Count).Value = _
RngToCopy.Value
WBQ.Close
'WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 10), Cells(lngLastQ, lngRightQ + lngInc  _
_
+ 10)).Value = WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 3), Cells(lngLastQ,  _
lngRightQ + lngInc + 3)).Value / WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 2), Cells(lngLastQ, lngRightQ + lngInc + 2)).Value
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
MsgBox "Es wurden " & UBound(varDateien) & " Dateien zusammengefügt.", 64
Exit Sub
errExit:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
If Err.Number = 13 Then
MsgBox "Es wurde keine Datei ausgewählt"
Else
MsgBox "Es ist ein Fehler aufgetreten!" & vbCr _
& "Fehlernummer: " & Err.Number & vbCr _
& "Fehlerbeschreibung: " & Err.Description
End If
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem beim txt zusammenführen mit Makro
26.06.2016 19:50:49
Matthias
Hallo Mirjam! Das Problem ist, dass beim Import erstmal alles als Text interpretiert wird. Entweder da vor dem kopieren die Werte umwandeln oder nachher.Ich habe mich für nachher entschieden. Dazu setze ich vorher den Bereich der eingefügt wird und gehe darin alle Zellen durch. VG

Public Sub Daten_mehrerer_Dateien_zusammenfuehren()
'Code für ein allgemeines Modul
'Autor: Jürgen Hennekes
On Error GoTo errExit
Dim WBQ As Workbook
Dim WBZ As Workbook
Dim varDateien As Variant
Dim lngAnzahl As Long
Dim lngLastQ As Long
Dim lngRightQ As Long
Dim lngInc As Long
Dim RngToCopy As Range
Dim DestCell As Range
Dim bereich As Range
Dim zelle As Range
Set WBZ = ActiveWorkbook
'Altdaten auf Zielblatt löschen
WBZ.Worksheets(1).Range("A1:IV65536").ClearContents
varDateien = _
Application.GetOpenFilename("Datei (*.txt),*.txt", False, "Bitte gewünschte Datei(en) markieren" _
_
_
, False, True)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
lngInc = 0
For lngAnzahl = LBound(varDateien) To UBound(varDateien)
Set WBQ = Workbooks.Open(Filename:=varDateien(lngAnzahl))
lngRightQ = WBZ.Worksheets(1).Cells(40, Columns.Count).End(xlToLeft).Column
lngLastQ = WBQ.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
If lngAnzahl > 1 Then lngInc = 2
Set RngToCopy = WBQ.Worksheets(1).Range("A1:Z" & lngLastQ)
Set DestCell = WBZ.Worksheets(1).Cells(1, lngRightQ + lngInc)
DestCell.Resize(RngToCopy.Rows.Count, RngToCopy.Columns.Count).Value = _
RngToCopy.Value
Set bereich = DestCell.Resize(RngToCopy.Rows.Count, RngToCopy.Columns.Count)
WBQ.Close
'WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 10), Cells(lngLastQ, lngRightQ + lngInc  _
_
_
+ 10)).Value = WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 3), Cells(lngLastQ, _
lngRightQ + lngInc + 3)).Value / WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 2),  _
Cells(lngLastQ, lngRightQ + lngInc + 2)).Value
For Each zelle In bereich
If zelle  "" And IsNumeric(zelle) Then
zelle.Value = CDbl(zelle.Value) * 1
End If
Next
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
MsgBox "Es wurden " & UBound(varDateien) & " Dateien zusammengefügt.", 64
Exit Sub
errExit:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
If Err.Number = 13 Then
MsgBox "Es wurde keine Datei ausgewählt"
Else
MsgBox "Es ist ein Fehler aufgetreten!" & vbCr _
& "Fehlernummer: " & Err.Number & vbCr _
& "Fehlerbeschreibung: " & Err.Description
End If
End Sub

Anzeige
AW: Problem beim txt zusammenführen mit Makro
26.06.2016 20:47:39
Mirjam
Hallo Matthias
ersteinmal vielen Dank für den Ratschlag. Das klingt mir plausibel. Leider ist das Resultat Deines Programmcodes das gleiche, wie ich auch hatte. Muss man dem Programm ggf. doch schon vorher sagen, dass er den Text als Zahl wandeln soll? Tut mir leid...meine letzten "Programmierkünste" sind wirklich schon ein paar Jahre her und ich benötige aktuell sehr viel Zeit, um mich da wieder reinzudenken..
Vielen Dank und viele Grüße von
Mirjam

AW: Problem beim txt zusammenführen mit Makro
26.06.2016 21:02:05
Mirjam
Hallo Matthias
ersteinmal vielen Dank für den Ratschlag. Das klingt mir plausibel. Leider ist das Resultat Deines Programmcodes das gleiche, wie ich auch hatte. Muss man dem Programm ggf. doch schon vorher sagen, dass er den Text als Zahl wandeln soll? Tut mir leid...meine letzten "Programmierkünste" sind wirklich schon ein paar Jahre her und ich benötige aktuell sehr viel Zeit, um mich da wieder reinzudenken..
Vielen Dank und viele Grüße von
Mirjam

Anzeige
AW: Problem beim txt zusammenführen mit Makro
26.06.2016 21:09:58
Matthias
Hallo! Gib mal bitte ein Beispiel für die Zahl an die gelesen werden soll und was dann bei dem Code oben rauskommt. Hatte ihn bei mir getestet und die Zahlen waren dann wieder Zahlen. Alternativ mal so probieren.
'zelle.Value = CDbl(zelle.Value) das raus
zelle.Value = Replace(zelle.Value, ",", ".")
VG

AW: Problem beim txt zusammenführen mit Makro
26.06.2016 21:17:16
Mirjam
Hallo Matthias
ich habe mal eine Beispielmatrix hochgeladen:
https://www.herber.de/bbs/user/106551.txt
Kannst Du bitte mal schauen, woran das liegen könnte? Ich danke Dir!
Viele Grüße von
Mirjam

Anzeige
AW: Problem beim txt zusammenführen mit Makro
26.06.2016 21:23:46
Matthias
Also hatte unten dem anderen Zweige noch was gepostet. Würde aber jetzt hier bleiben, sonst wird es unübersichtlich. :-) Also mit der zweiten Variante klappt es bei mir. Habe mal Daten aus deinem Anhang bei mir in eine txt kopiert. MIt dem Code hat es auch geklappt. Schreibe ihn hier nochmal drunter. Hast du sonst ggf. nen MAC - da ist manchmal was anders? Viele Grüße

Public Sub Daten_mehrerer_Dateien_zusammenfuehren()
'Code für ein allgemeines Modul
'Autor: Jürgen Hennekes
On Error GoTo errExit
Dim WBQ As Workbook
Dim WBZ As Workbook
Dim varDateien As Variant
Dim lngAnzahl As Long
Dim lngLastQ As Long
Dim lngRightQ As Long
Dim lngInc As Long
Dim RngToCopy As Range
Dim DestCell As Range
Dim bereich As Range
Dim zelle As Range
Set WBZ = ActiveWorkbook
'Altdaten auf Zielblatt löschen
WBZ.Worksheets(1).Range("A1:IV65536").ClearContents
varDateien = _
Application.GetOpenFilename("Datei (*.txt),*.txt", False, "Bitte gewünschte Datei(en) markieren" _
_
_
, False, True)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
lngInc = 0
For lngAnzahl = LBound(varDateien) To UBound(varDateien)
Workbooks.OpenText Filename:=varDateien(lngAnzahl), DecimalSeparator:=","
Set WBQ = ActiveWorkbook
lngRightQ = WBZ.Worksheets(1).Cells(40, Columns.Count).End(xlToLeft).Column
lngLastQ = WBQ.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
If lngAnzahl > 1 Then lngInc = 2
Set RngToCopy = WBQ.Worksheets(1).Range("A1:Z" & lngLastQ)
Set DestCell = WBZ.Worksheets(1).Cells(1, lngRightQ + lngInc)
DestCell.Resize(RngToCopy.Rows.Count, RngToCopy.Columns.Count).Value = _
RngToCopy.Value
WBQ.Close
'WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 10), Cells(lngLastQ, lngRightQ + lngInc  _
_
_
+ 10)).Value = WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 3), Cells(lngLastQ, _
lngRightQ + lngInc + 3)).Value / WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 2),  _
Cells(lngLastQ, lngRightQ + lngInc + 2)).Value
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
MsgBox "Es wurden " & UBound(varDateien) & " Dateien zusammengefügt.", 64
Exit Sub
errExit:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
If Err.Number = 13 Then
MsgBox "Es wurde keine Datei ausgewählt"
Else
MsgBox "Es ist ein Fehler aufgetreten!" & vbCr _
& "Fehlernummer: " & Err.Number & vbCr _
& "Fehlerbeschreibung: " & Err.Description
End If
End Sub

Anzeige
AW: Problem beim txt zusammenführen mit Makro
26.06.2016 20:44:21
Matthias
Wenn du nicht genau weißt, was es für Zahlen sind kannst du es auch so machen. Also die Zeile vom Post vorher einfach so tauschen. VG
'zelle.Value = CDbl(zelle.Value) die weg
zelle.Value = Replace(zelle.Value, ",", ".")

AW: Problem beim txt zusammenführen mit Makro
26.06.2016 21:08:22
Mirjam
Leider funktioniert das nicht - statt 1,345 steht da eine 1345. Zahlen unter 1 werden als Kommazahlen ganz normal geschrieben...

AW: Problem beim txt zusammenführen mit Makro
26.06.2016 21:19:55
Matthias
Hallo! Viele Wege führen nach Rom. :-) Probiere es mal so. Ist eine andere Variante des Öffnens. Dabei werden gleich die Dezimaltrennzeichen auf , geändert.( Standart ist . ) Damit erkennt Excel das als Zahl. Getestet und läuft. Zumindest bei mir. :-) Viele Grüße
Public Sub Daten_mehrerer_Dateien_zusammenfuehren()
'Code für ein allgemeines Modul
'Autor: Jürgen Hennekes
On Error GoTo errExit
Dim WBQ As Workbook
Dim WBZ As Workbook
Dim varDateien As Variant
Dim lngAnzahl As Long
Dim lngLastQ As Long
Dim lngRightQ As Long
Dim lngInc As Long
Dim RngToCopy As Range
Dim DestCell As Range
Dim bereich As Range
Dim zelle As Range
Set WBZ = ActiveWorkbook
'Altdaten auf Zielblatt löschen
WBZ.Worksheets(1).Range("A1:IV65536").ClearContents
varDateien = _
Application.GetOpenFilename("Datei (*.txt),*.txt", False, "Bitte gewünschte Datei(en) markieren" _
_
_
, False, True)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
lngInc = 0
For lngAnzahl = LBound(varDateien) To UBound(varDateien)
Workbooks.OpenText Filename:=varDateien(lngAnzahl), DecimalSeparator:=","
Set WBQ = ActiveWorkbook
lngRightQ = WBZ.Worksheets(1).Cells(40, Columns.Count).End(xlToLeft).Column
lngLastQ = WBQ.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
If lngAnzahl > 1 Then lngInc = 2
Set RngToCopy = WBQ.Worksheets(1).Range("A1:Z" & lngLastQ)
Set DestCell = WBZ.Worksheets(1).Cells(1, lngRightQ + lngInc)
DestCell.Resize(RngToCopy.Rows.Count, RngToCopy.Columns.Count).Value = _
RngToCopy.Value
WBQ.Close
'WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 10), Cells(lngLastQ, lngRightQ + lngInc  _
_
_
+ 10)).Value = WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 3), Cells(lngLastQ, _
lngRightQ + lngInc + 3)).Value / WBZ.Worksheets(1).Range(Cells(35, lngRightQ + lngInc + 2),  _
Cells(lngLastQ, lngRightQ + lngInc + 2)).Value
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
MsgBox "Es wurden " & UBound(varDateien) & " Dateien zusammengefügt.", 64
Exit Sub
errExit:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
If Err.Number = 13 Then
MsgBox "Es wurde keine Datei ausgewählt"
Else
MsgBox "Es ist ein Fehler aufgetreten!" & vbCr _
& "Fehlernummer: " & Err.Number & vbCr _
& "Fehlerbeschreibung: " & Err.Description
End If
End Sub

Anzeige
AW: Problem beim txt zusammenführen mit Makro
26.06.2016 21:23:09
Mirjam
Oh Mann! Der Wahnsinn...danke. In Millisekunden die Lösung programmieren, würde ich auch gerne können :D! Funktioniert wirklich super.
Ich wünsche Dir noch einen schönen Sonntag Abend!
Beste Grüße von
Mirjam

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige