wieder einmal habe ich kleines ? VBA Problem.
Ich bearbeite ständig Excellisten mit ca 200 Zeilen.
Nun möchte ich aus dem Tabellenblatt die Kopfzeilen und den markierten Bereich gleichzeitig in ein neues Tabellenblatt kopieren.(Zeilenlänge immer bis Spalte P).
Folgenden Code habe ich hierbei aufgenommen:
Sub zwei_Bereiche_in_neues_Tabellenblatt_kopieren()
Range(„A1:stuck_out_tongue:7“).Select ´Kopfzeilen ist immer gleich
´Jetzt sollte hier der markierte Bereich rein, den ich vor dem ausführen des Makros markiert habe
Es sollte der Kopfbereich A1:stuck_out_tongue:7 in ein neues Tabellenblatt kopiert werden und ab Zeile 8 die markierten Zeilen anschließen. Makroende. Danach wechsle ich zurück zum Ausgangs- Tabellenblatt markiere den nächsten Bereich und führe das Makro erneut aus usw…
Für Eure Hilfe bin ich dankbar.
Viele Grüße Hans
Probier doch mal das hier (nicht sehr ausgiebig getestet, sollte aber klappen…):
PS: Es würde noch einfacher gehen, indem man zuerst die Markierung kopiert und dann die Kopfzeilen, aber so kannst Du gleich sehen, wie man grundsätzlich zwischen einem alten und einem neu erstellten Blatt hin und herwechseln kann…
PPS: Wenn Du als letzte Makrozeile noch ein
Sheets(originalblatt).Activate
einfügst, dann landest Du gleich wieder im alten Blatt und kannst weiterkopieren.
---- schnipp ----
Sub zwei_Bereiche_in_neues_Tabellenblatt_kopieren()
'Name des aktuellen Blattes wird ausgelesen
originalblatt = ActiveSheet.Name
'Momentane Markierung wird ausgelesen
meineauswahl = Selection.Address
'Kopfbereich wird kopiert
Range(„A1:stuck_out_tongue:7“).Copy
'Neues Blatt wird eingefügt und sein Name ausgelesen
neuesblatt = Sheets.Add.Name
Sheets(neuesblatt).Cells(1, 1).Select '(sicherheitshalber…)
'Zwischenablage wird eingefügt
ActiveSheet.Paste
'alte Auswahl wird kopiert
Sheets(originalblatt).Range(meineauswahl).Copy
'Zelle A8 im neuen Blatt wird markiert und die Zwischenablage eingefügt
Sheets(neuesblatt).Cells(8, 1).Select
Sheets(neuesblatt).Paste
Dein Code macht Folgendes:
Du markierst den Kopfzeilenbereich, dann markierst Du den Datenbereich und dann kopierst Du. Folglich wird wahrscheinlich nur der die letzte Markierung kopiert.
Wenn ich Dich richtig verstanden habe, dann willst Du immer den gleichen Kopfzeilenbereich in ein neues Tabellenblatt kopieren
UND
einen frei wählbaren Bereich unter die Kopfzeile im neuen Blatt einfügen.
Ich wüsste jetzt auf Anhieb nicht, wie man das Makro unterbrechen kann um die Markierung vorzunehmen, aber hier mal eine andere Idee, die mit einfügen der Kopfzeilen NACH dem Kopieren des freien Datenbereichs funktioniert:
Sub Erst_Bereich_markieren_dann_kopieren_dann_Kopfzeilen_einfügen()
Dim wksSource, wksDestination As Worksheet
'Quelldatenblatt festlegen
Set wksSource = ThisWorkbook.ActiveSheet
'Markierung kopieren
Selection.Copy
'Zieldatenblatt einfügen und festlegen
Set wksDestination = ThisWorkbook.Worksheets.Add(after:=Sheets(Sheets.Count))
'Einfügen
With wksDestination
.Paste
End With
'Kopfbereich auf Quelldatenblatt kopieren
With wksSource
Range(.Cells(1, 1), .Cells(7, 16)).Copy
End With
'Kopfbereich auf Zieldatenblatt einfügen und Zeilen nach unten verschieben
With wksDestination
.Cells(1, 1).Insert Shift:=xlShiftDown
End With
'Zwischenablage löschen
Application.CutCopyMode = False
End Sub
Beachte aber, dass Du so selber sicherstellen musst, dass immer das richtige Blatt aktiv ist. Mit „Selection“ programmiert man ungerne, da vorallem bei größeren Makros schwer sichergestellt werden kann, dass auch der richtige Bereich gerade markiert und aktiv ist. Besser wäre es, wenn man implizit auf das Quelldatenblatt verweisen könnte. Aber vielleicht reicht Dir das ja erst mal so.
habe eben das Makro von Flocko probiert, funktioniert.
Nun Deines, bleibt bei mir nach der Zeile
Selection.Copy hängen. Vielleicht liegts an meiner alten VBA Version Visual Basic 6.0 von 1999?.
Auf jeden Fall schon mal Dankeschön
Hans
ich habe mir Deinen Code soeben nochmal nach VBA kopiert keine Fehlermeldung, keine neues Tabellenblatt.
Obwohl ich auch einen Bereich markiert habe.
Auch habe ich bis jetzt noch nicht die Formatierung in das neue Tabellenblatt übertragen können.
(Makro von flocko 12.04.10 siehe oben).
Vielen Dank für die Zeit die Ihr reinsteckt um mir zu helfen.
Gruß Hans
also bei mir funktioniert der Code. Du führst den schon im VBA-Editor aus, oder? Wie kann denn nichts ohne Fehlermeldung passieren? Irgendwo muss er doch hängen bleiben. Probier vielleicht mal aus den Code mit F8 Zeile für Zeile auszuführen.
Ich kann Dir schlecht weiterhelfen, wenn ich deine Datei nicht kenne und nicht genau weiß, wass Du willst. Geh am besten mal auf http://www.office-loesung.de/ und suche dort auch mal nach einer Lösung.
Makro läuft nun da ich es nicht in ein Modul der personl.xls kopiert habe, sondern in „diese Arbeitsmappe“ ein neues Modul eingefügt habe und den Code eingefügt habe.
Wie kann ich die Formatierung der Spalten und Zeilen beim übertragen auch mit kopieren? (Spalten u. Zeilenbreite).
Flocko hat auch eine Beitrag dazu am 13.04 geschrieben. Einzusehen unter den Pfad: Bereiche in neues Tabellenblatt kopieren.
So, jetzt bin ich dank Ihrer Hilfe wieder einen Schritt weiter gekommen.
Doch die Formatierung zu übertragen wäre noch super.