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

Verschiedene Inputs per Makro kopieren

Verschiedene Inputs per Makro kopieren
20.07.2020 16:36:45
Peter
Hi zusammen,
ich stehe vor folgender Fragestellung:
Ich habe ca. 250 Input-Dateien (immer gleicher Aufbau) von denen ich aus einem bestimmten Worksheet (nennen wir es Worksheet2) immer die Range C10:E170 benötige. Dabei soll der Input aus den verschiedenen Dateien untereinander in ein neues Workbook in das Worksheet "Auswertung" kopiert werden.
Wichtig ist dabei noch, dass der Input in dem Worksheet ("Auswertung") erst ab der Zelle C2 reinkopiert werden soll (benötige Zeile 1 für Überschriften). In der Spalte A soll zusätzlich für die gesamte jeweilige Range ein Input einer fixen Zelle stehen (immer Zelle D4 aus dem Worksheet2) und in Spalte B immer Zeile D5 (gleiches Worksheet) - Input der Spalten A und B ändert sich aber je nach Input-Workbook.
Ich habe bereits einiges probiert (siehe unten). Mit dem folgenden Makro habe ich aber noch 3 grundsätzliche Probleme / Fragen:
1) Es wird nur 1x der Input kopiert und nicht untereinander geschrieben (erhalte nur 170 Zeilen)
2) Wie kann ich den spezifischen Input für Spalte A und B integrieren?
3) Bedeutet Range("A65536"), dass mein Auswertungssheet in Zeile 65536 stoppt? Es werden insgesamt mehr Zeilen benötigt, kann ich die Range einfach ausweiten bzw. wird diese Einschränkung überhaupt benötigt?
Vielen Dank vorab für die Hilfe!
Sub Auswertung_Aktivitaetenerhebung()
On Error GoTo errExit
Dim WBQ As Workbook
Dim WBZ As Workbook
Dim varDateien As Variant
Dim lngAnzahl As Long
Dim lngLastQ As Long
Set WBZ = ActiveWorkbook
'Altdaten auf Zielblatt löschen
WBZ.Worksheets(1).Range("A2:IV65536").ClearContents
varDateien = _
Application.GetOpenFilename("Datei (*.xlsx),*.xlsx", False, "Bitte gewünschte Datei(en)  _
markieren", False, True)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
For lngAnzahl = LBound(varDateien) To UBound(varDateien)
Set WBQ = Workbooks.Open(Filename:=varDateien(lngAnzahl))
lngLastQ = WBQ.Worksheets("2").Range("A65536").End(xlUp).Row
WBQ.Worksheets("2").Range("C10:E160" & lngLastQ).Copy _
Destination:=WBZ.Worksheets("AUSWERTUNG").Range("C" & WBZ.Worksheets(1).Range("A65536").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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verschiedene Inputs per Makro kopieren
20.07.2020 18:09:26
ralf_b
wenn du immer die gleiche Range haben willst, dann brauchst du dir diese nicht extra zusammenzubasteln.
das ist die letzte benutzte Zeile in Spalte A deiner Inputtabellen.
die brauchst du gar nicht.
lngLastQ = WBQ.Worksheets("2").cells(rows.count,3).End(xlUp).Row
Das hier ist sehr komisch
WBQ.Worksheets("2").Range("C10:E160" & lngLastQ).Copy
dies würde reichen
WBQ.Worksheets("2").Range("C10:E170").Copy
Und das
"C" & WBZ.Worksheets(1).Range("A65536").End(xlUp).Row + 1)
sollte dann so aussehen
"C" & WBZ.Worksheets("AUSWERTUNG").Cells(Rows.Count, 3).End(xlUp).Row + 1)
weil du erst ab Spalte C reinkopierst, nehmen wir für die Ermittelung der letzten benutzten Zeile auch die Spalte C
um die beiden ersten zeilen zu überspringen muß das in der for-schleife abgefangen werden.

if lngAnzahl = LBound(varDateien) then
WBQ.Worksheets("2").Range("C10:E170").Copy _
Destination:=WBZ.Worksheets("AUSWERTUNG").Range("C2")
else
WBQ.Worksheets("2").Range("C10:E170").Copy _
Destination:=WBZ.Worksheets("AUSWERTUNG").Range("C" & _
WBZ.Worksheets("AUSWERTUNG").Cells(Rows.Count,3).End(xlUp).Row + 1)
end if
WBZ.Worksheets("AUSWERTUNG").Range("A" & _ WBZ.Worksheets("AUSWERTUNG").Cells(Rows.Count,3).End( _
xlUp).Row -160 & ":A" & _ WBZ.Worksheets("AUSWERTUNG").Cells(Rows.Count,3).End(xlUp).Row)).Value = _  WBQ.Worksheets("2").Range("D4").value
WBZ.Worksheets("AUSWERTUNG").Range("B" & _
WBZ.Worksheets("AUSWERTUNG").Cells(Rows.Count,3).End(xlUp).Row -160 & ":B" & _ WBZ.Worksheets(" _
AUSWERTUNG").Cells(Rows.Count,3).End(xlUp).Row)).Value = _ WBQ.Worksheets("2").Range("D5").value

Anzeige
AW: Verschiedene Inputs per Makro kopieren
22.07.2020 18:18:45
Peter
Danke euch, funktioniert!
AW: Verschiedene Inputs per Makro kopieren
20.07.2020 18:30:19
volti
Hallo,
hier eine Idee zur Erweiterung Deines Codes:

[+][-]
Option Explicit Sub Auswertung_Aktivitaetenerhebung() '******************************** On Error GoTo errExit Dim WBQ As Workbook Dim WBZ As Workbook Dim WShZ As Worksheet Dim varDateien As Variant Dim lngAnzahl As Long Dim lngLastZ As Long Set WBZ = ActiveWorkbook 'Altdaten auf Zielblatt löschen Set WShZ = WBZ.Sheets("Auswertung") lngLastZ = WShZ.Cells(WShZ.Rows.Count, "C").End(xlUp).Row WShZ.Range("A2:IV" & lngLastZ).ClearContents varDateien = _ Application.GetOpenFileName("Datei (*.xlsx),*.xlsx", False, _ "Bitte gewünschte Datei(en) markieren ", False, True) With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With For lngAnzahl = LBound(varDateien) To UBound(varDateien) With Workbooks.Open(Filename:=varDateien(lngAnzahl)) lngLastZ = WShZ.Cells(WShZ.Rows.Count, "C").End(xlUp).Row + 1 .Sheets(1).Range("C10:E170").Copy _ Destination:=WShZ.Range("C" & lngLastZ) .Close Savechanges:=False End With Next lngAnzahl With Application .ScreenUpdating = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With MsgBox "Es wurden " & UBound(varDateien) & " Dateien zusammengefügt.", vbInformation 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
viele Grüße aus Freigericht
Karl-Heinz

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige