AW: Fehler muss in den Input-Dateien liegen
08.01.2015 15:55:21
Klaus
Hier holt sich das Makro den "Kopierbereich". Schlechter Stil, da auf die schnelle hingeschustert, aber egal :-) Die Logik ist ja auch sehr speziell an deine Bedürfnisse angepasst. Viel Einfacher wäre es, wenn jeder Report immer in der gleichen Zeile anfängt - aber das bekommst du nicht durch, oder?
Dim lRow As Long
Dim fRow As Long
With ActiveSheet
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
fRow = .Cells(lRow, 2).End(xlUp).Row
If fRow > 1 Then fRow = fRow + 1
.Range(.Cells(lRow, 2), .Cells(fRow, 14)).Copy
End With
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
lRow = "last", letzte Zeile. Dafür geht das Makro in Zelle B65536 und tippt "STRG+up", kannst du gerne nachmachen. Es landet in einer Zeile, zum Beispiel in Zeile 12. Es merkt sich jetzt: Die letzte Zeile des Kopierbereichs ist Zeile 12
fRow = .Cells(lRow, 2).End(xlUp).Row
fRow = "first", erste Zeile. Das Makro geht in die Zelle B* wobei * die letzte Zeile ist die es bereits ermittelt hat und tippt "STRG+up". Damit landet es zum Beispiel in Zeile 4, wo die Überschriften stehen.
If fRow > 1 Then fRow = fRow + 1
Wenn wir in Zeile 1 landen, hat dieses Blatt keine Überschriften - das lässt fRow also auf 1 stehen. Landet es in einer Zeile ausser Zeile 1, dann gab es Überschriften in diesem Blatt.
Da die Überschriften nicht jedesmal mit kopiert werden sollen, merkt es sich stattdessen eine Zeile weiter unten, also Zeile 5 (daher das +1)
.Range(.Cells(lRow, 2), .Cells(fRow, 14)).Copy
Jetzt wird der Bereich B5:N14 kopiert
In deiner Input-Musterdatei mit 5 Reitern im ersten Blatt "Report 1" kannst du das ja mal ausprobieren. Kopiere folgendes Testmakro in die Datei und lasse es laufen, schau dir an welcher Bereich selektiert wurde:
Sub SelectionTestMakro()
Dim lRow As Long
Dim fRow As Long
With ActiveSheet
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
fRow = .Cells(lRow, 2).End(xlUp).Row
If fRow > 1 Then fRow = fRow + 1
.Range(.Cells(lRow, 2), .Cells(fRow, 14)).SELECT
End With
End Sub
Jetzt schreibe in B2 "Hallo" und in B3 "Welt" und lasse das Testmakro nochmal laufen. Du siehst, wie der ausgewählte Bereich falsch wird!
Identifiziere die Quelldatei, welche zu einer falschen Selektion führt und lade sie mir hoch, dann passe ich das nochmal an. Wenn du eine eindeutige Regel hast, ab welcher Zeile es anfängt, baue ich die ein. Mein Vorschlag in Pseudocode:
- steht etwas in Zelle N1?
- wenn ja, dann markiere von der ersten bis zur letzten Zeile
- wenn nein, dann ist es ein Blatt mit Überschriften. In dem Fall:
- Suche die Buchstabenkomination "PLZ" in der gesamten Spalte N und merke dir die zugehörige Zeile
- markiere ab eins unter "PLZ" bis zum Listenende
so etwas kann aber nur funktionieren, wenn ausnahmslos immer "PLZ" als Überschrift in Spalte N steht - und niemals "Postzeitzahl" oder "PLZ_" oder " PLZ" oder sonst ein Unsinn.
Welche Regel nutzbar ist kannst nur du wissen, denn nur du kennst alle Inputdateien und deren Regeln!
Grüße,
Klaus M.vdT.