Hallo liebe Forum-Gemeinde,
ich habe mich hier angemeldet, weil ich nicht mehr weiter weis. Ich muss immoment ein Programm in der Arbeit schreiben, welches mehrere Dateien zusammenfügt (in meinem Fall xlsx). Soweit so gut. Das Zusammenfügen funktioniert bis jetzt einwandfrei. Mein Problem ist nun, das mein Chef möchte, dass ich in Spalte A den Dateinamen schreibe, aus welcher Datei die betreffende Zeile stammt. Ich bin neu in Visual Basic und hab kaum erfahrungen, hab mir vieles aus dem Internet geholt und zusammen gefummelt. Ich hoffe mir kann jmd. helfen, es eilt sehr.
Vielen Dank, euere Odi
ich habe mich hier angemeldet, weil ich nicht mehr weiter weis. Ich muss immoment ein Programm in der Arbeit schreiben, welches mehrere Dateien zusammenfügt (in meinem Fall xlsx). Soweit so gut. Das Zusammenfügen funktioniert bis jetzt einwandfrei. Mein Problem ist nun, das mein Chef möchte, dass ich in Spalte A den Dateinamen schreibe, aus welcher Datei die betreffende Zeile stammt. Ich bin neu in Visual Basic und hab kaum erfahrungen, hab mir vieles aus dem Internet geholt und zusammen gefummelt. Ich hoffe mir kann jmd. helfen, es eilt sehr.
Vielen Dank, euere Odi
Visual Basic-Quellcode
- Public Sub Daten_mehrerer_Dateien_zusammenfuehren()
- 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 x As Integer
- Set WBZ = ActiveWorkbook
- 'Altdaten auf Zielblatt löschen
- WBZ.Worksheets(1).Range("A1:IV65536").ClearContents
- varDateien = _
- Application.GetOpenFilename("Excel-Arbeitsmappe (*.xlsx),*.xlsx" & "Excel 97-2003-Arbeitsmappe (*.xls; *.xlsm),*.xls; *.xlsm,", False, "Bitte gewünschte Datei(en) markieren", False, True)
- With Application
- .ScreenUpdating = False
- .EnableEvents = False
- .Calculation = xlCalculationManual
- End With
- 'Lese Tabellenüberschriften aus
- For lngAnzahl = LBound(varDateien) To UBound(varDateien)
- Range("A1").Value = "SOURCE_FILE" 'Beschriftet Spalte A für den Dateipfad
- Set WBQ = Workbooks.Open(Filename:=varDateien(lngAnzahl))
- WBQ.Worksheets(1).Range("A1:Z1").Copy _
- Destination:=WBZ.Worksheets(1).Range("B" & WBZ.Worksheets(1).Range("B65536").End(xlUp).Row + 0)
- WBQ.Close
- Next
- 'Lese Tabelleninhalt aus
- For lngAnzahl = LBound(varDateien) To UBound(varDateien)
- x = ActiveSheet.Cells(1048576, 2).End(xlUp).Row + 1 'Soll mir die Größe des Excels bestimmen
- Range("A2:A" & x).Value = varDateien 'Soll Dateien in Spalte A schreiben -> funktioniert leider nicht. Ich bekomme immer die letzte Zeile aus der Variante und das rein schreiben funktioniert auch nicht wirklich
- Set WBQ = Workbooks.Open(Filename:=varDateien(lngAnzahl))
- lngLastQ = WBQ.Worksheets(1).Range("A65536").End(xlUp).Row
- WBQ.Worksheets(1).Range("A2:Z" & lngLastQ).Copy _
- Destination:=WBZ.Worksheets(1).Range("B" & WBZ.Worksheets(1).Range("B65536").End(xlUp).Row + 1)
- WBQ.Close
- 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