Kopieren von Tabellenblatt in Tabellenblätter innerhalb von derselben Datei.

Paissen

Newbie
Registriert
März 2013
Beiträge
5
Hallo zusammen,

ich habe gerade ein Problem und komme nicht auf den grünen Zweig :freak:.

Was will ich?
Also ich möchte einen bestimmten Bereich von Tabelle1 (A1 bis P198) in Tabelle2, 3, 4, 5, 6 so rüber kopieren, dass alle Farbmarkierung und Schriftstyle übernommen wird.
Es soll vollautomatisch kopieren, also ohne Button oder ähnliches.

Mit was soll das gesehen?
Ich benütze Excel 2007 und würde es gerne über VBA programmieren oder SVERWEIS
Wenn ich in Tabelle2 =Tabelle1!A1 mache, dann kann ich über die Suchfunktion nicht nach Artikelnummern suchen. Das will ich aber erreichen (später ca. 5000 Artikel-Nr.in alle 6 Tabellen)

Bisherige Vorgehensweise:
1. Schritt

Sub KopiereBereich()
Dim Quelltab As Worksheet
Dim Zieltab As Worksheet
Dim Zelle As Range
Dim A1 As Long
A1 = 1
Bereich = "A1:P198"
Set Quelltab = ActiveWorkbook.Worksheets("Tabelle1")
For Each Zelle In Quelltab.Range("A1:A198")
Zieltab.Cells(A1, 1) = Zelle
A1 = A1 + 1
Next Zelle
End Sub
Hierbei kopiere ich komplette Tabelle1 aber alles auf Spalte A. für die restlichen Tabellen3, 4, 5, 6 fehlt mir leider auch der CODE.

2. Schritt
Sub KopiereBereich()
Dim Rng2Copy As Range, Rng2Paste As Range
Dim aWerte()

Set Rng2Copy = Sheets("Tabelle1").Range("A1:P198")
Set Rng2Paste = Sheets("Tabelle2").Range("A1:P198")
aWerte() = Rng2Copy
Rng2Paste = aWerte()
End Sub
Das kommt am nähersten an meiner Vorstellung ran. Das Problem hier ist, dass ich auch nur 1 Tabelle kopieren kann. CODE für Tabelle3, 4, 5, 6 fehlt mir auch und es funktioniert nicht vollautomatisch.

Für Euch Hilfe bedanke mich schon im Voraus.

Gruß
Paissen, der Nullcecker
 
Wenn es bei Schritt 2 nur darum geht, das auch in die weiteren Tabellenblätter zu bekommen, definiere Dir doch einfach noch Rng3Paste, Rng4Paste, ... und mache die gleiche Zuweisung =aWerte() auch in diese Bereiche.

Damit gewinnst Du zwar nicht den Schönheitspreis beim Programmieren, aber für fünf Bereiche muss man ja nicht unbedingt eine Schleife programmieren ...
 
Hallo ms007,

sorry für meine "blöde" Frage! Hab mit VBA noch keine Erfahrung.

Also ich hab es so gemacht. Aber da bekomme ich immer Fehlermeldung "Laufzeitfehler ´9´: Index auperhalb des gültigen Bereichs"
Ich habe bestimmt irgendwo ein fehler gemacht oder Dich falsch verstanden.

Schau so habe ich versucht zu lösen:

Sub KopiereBereich()
Dim Rng2Copy As Range, Rng2Paste As Range
Dim Rng3Copy As Range, Rng3Paste As Range
Dim Rng4Copy As Range, Rng4Paste As Range
Dim Rng5Copy As Range, Rng4Paste As Range
Dim Rng6Copy As Range, Rng4Paste As Range
Dim aWerte()

Set Rng2Copy = Sheets("Tabelle1").Range("A1:P198")
Set Rng2Paste = Sheets("Tabelle2").Range("A1:P198")
Set Rng3Paste = Sheets("Tabelle3").Range("A1:P198")
Set Rng4Paste = Sheets("Tabelle4").Range("A1:P198")
Set Rng5Paste = Sheets("Tabelle5").Range("A1:P198")
Set Rng6Paste = Sheets("Tabelle6").Range("A1:P198")
aWerte() = Rng2Copy
Rng2Paste = aWerte()
aWerte() = Rng3Copy
Rng3Paste = aWerte()
aWerte() = Rng4Copy
Rng4Paste = aWerte()
aWerte() = Rng5Copy
Rng5Paste = aWerte()
aWerte() = Rng6Copy
Rng6Paste = aWerte()

End Sub

Wäre Cool wenn du mir dabei helfen könntest.

Gruß
Paissen
 
Lass mal ein paar Sachen weg:

Sub KopiereBereich()
Dim Rng2Copy As Range
Dim Rng2Paste As Range, Rng3Paste As Range
Dim Rng4Paste As Range, Rng5Paste As Range
Dim Rng6Paste As Range
Dim aWerte()

Set Rng2Copy = Sheets("Tabelle1").Range("A1:P198")
Set Rng2Paste = Sheets("Tabelle2").Range("A1:P198")
Set Rng3Paste = Sheets("Tabelle3").Range("A1:P198")
Set Rng4Paste = Sheets("Tabelle4").Range("A1:P198")
Set Rng5Paste = Sheets("Tabelle5").Range("A1:P198")
Set Rng6Paste = Sheets("Tabelle6").Range("A1:P198")
aWerte() = Rng2Copy
Rng2Paste = aWerte()
Rng3Paste = aWerte()
Rng4Paste = aWerte()
Rng5Paste = aWerte()
Rng6Paste = aWerte()

End Sub
 
Hallo ms007,

erstmal vielen Dank für deine Mühe und Zeit.
Das ist auf jedenfall besser was ich fabriziert habe.


Nun habe deine Programmierung übernommen und es ausführen lassen.
Das Problem mit dem "Laufzeitfehler `9`: Index außerhalb des gültigen Bereiches" kommt weiterhin.
Hängt das damit zusmmen, dass meine Tabellenblätter andere Bezeichnungen haben als Tabelle1 usw?

Aus Excel-Hilfe werde ich leider auch nicht so recht schalu. Dort heißt es, ich soll einen Bereich vor definieren.
Das machen wir doch mit Range ("A1:P198") nicht wahr?
 
Wenn deine Tabellen anders heißen als TabelleX, musst du das im Code natürlich ändern.

Anstelle von Sheets("TabelleX").Range... kannst du auch den Codenamen alleine verwenden: TabelleX.Range.... Dann stört es auch nicht, wenn du in Excel die Tabellen umbenennst, denn der Codename bleibt davon unberührt.

In welcher Zeile wird der Fehler denn angezeigt?
 

Anhänge

  • excel-codename.png
    excel-codename.png
    12 KB · Aufrufe: 262
Zuletzt bearbeitet:
Uuups Alles zurück!!! Bin da etwas falsch angegangen.

Es läuft alles super. So ungefähr habe ich es mir vorgestellt.
Danke ms007!

Das einzige was noch fehlt ist das kopieren von formatierten Zellen. D.h. Farben, Schriftart und falls durchgestrichen das alles mit in die anderen Tabellen kopiert.

Falls mir da jemand ein Code geben kann!
Das würde mir auch sehr weit helfen.

Danke schon mal im Voraus für euche Hilfe....
 
Geh's mal so an:

Sheets("Tabelle2").Range("A1:P198").Copy Sheets("Tabelle1").Range("A1:P198")
...
 
Du kopierst es im Grunde auch nicht, sondern weist den Zellen nur denselben Wert einer anderen Zelle/Bereich zu.

Machs mal so:

Code:
Range(...).Copy
Range(...).PasteSpecial
'Alternativ:
Range(...).PasteSpecial Paste:=xlAll 'fügt alles ein: Werte, Formate, Kommentare

[table="width: 700, class: grid"]
[tr][td]Name[/td][td]Wert[/td][td]Beschreibung[/td][/tr]
[tr][td]xlPasteAll[/td][td]-4104[/td][td]Alles wird eingefügt.[/td][/tr]
[tr][td]xlPasteAllExceptBorders[/td][td]7[/td][td]Alles außer den Rahmen wird eingefügt.[/td][/tr]
[tr][td]xlPasteAllUsingSourceTheme[/td][td]13[/td][td]Alles wird unter Verwendung des Quelldesigns eingefügt.[/td][/tr]
[tr][td]xlPasteColumnWidths[/td][td]8[/td][td]Die kopierte Spaltenbreite wird eingefügt.[/td][/tr]
[tr][td]xlPasteComments[/td][td]-4144[/td][td]Kommentare werden eingefügt.[/td][/tr]
[tr][td]xlPasteFormats[/td][td]-4122[/td][td]Das kopierte Quellformat wird eingefügt.[/td][/tr]
[tr][td]xlPasteFormulas[/td][td]-4123[/td][td]Formeln werden eingefügt.[/td][/tr]
[tr][td]xlPasteFormulasAndNumberFormats[/td][td]11[/td][td]Formeln und Zahlenformate werden eingefügt.[/td][/tr]
[tr][td]xlPasteValidation[/td][td]6[/td][td]Überprüfungen werden eingefügt.[/td][/tr]
[tr][td]xlPasteValues[/td][td]-4163[/td][td]Werte werden eingefügt.[/td][/tr]
[tr][td]xlPasteValuesAndNumberFormats[/td][td]12[/td][td]Werte und Zahlenformate werden eingefügt.[/td][/tr]
[/table]
 
Zuletzt bearbeitet:
Hallo Snooty und ms007,

ich habe nur noch eine verständnis frage!
Soll ich nun das ganze VBA-Code ändern oder kann ich eure Codes nur einfach dranhängen?

Beispiel:
Sub KopiereBereich()
Dim Rng2Copy As Range
Dim Rng2Paste As Range, Rng3Paste As Range

Dim aWerte()
Set Rng2Copy = Tabelle1.Range("A4:P198")
Set Rng2Paste = Tabelle2.Range("A4:P198").Pastespecial Paste:=alAll (so kommt Fehler Meldung:
"Fehler beim Kompilieren: Erwartet: Anweisungsende" und Markiert mir Paste)


aWerte() = Rng2Copy
Rng2Paste = aWerte()
End Sub

oder wie soll es genau aussehen
Sorry für mein Unerfahrenheit. Ich weiß wie es ist Anfänger alles zu erklären ;o)
 
Zuletzt bearbeitet:
Offen gesagt blicke ich hier nicht ganz durch den Nebel durch. Und damit meine ich die Aufgabe wie sie gestellt ist:

einen bestimmten Bereich so rüber kopieren, dass
Hier müsste ich auf die dritte Zeile vorgreifen aber ich lasse das mal.

Willst du also physisch den Quell-Range kopieren (was Formatierungen natürlich komplett mitnimmt) oder, da du SVERWEIS ansprichst, genügen dir (ja geradezu möchtest du) flexible Bezüge an den Zielorten haben?
Im zweiten Falle - lege sie an, und übernimm mit dem Formatpinsel die Formate. Da sollte doch genügen; Ändernge an der Quelle tauchen nun an den Zielen automatisch auf.

alle Farbmarkierung und Schriftstyle übernommen wird.
Das ist in XL immer so eine Frage… Entweder ich kopiere alles physisch und starr, oder (nachdem ich es eben so vorbereitet hätte) ich bemühe Bezüge (die im originalen Zustand wie an der Quelle aussehen).

Es soll vollautomatisch kopieren, also ohne Button oder ähnliches.
Tja… Was ist vollautomatisch?
Und, wie oben angedeutete, wenn du Bezüge nimmt und das Feld vorher bestellst geht das wortwörtlich automatisch. Wenn du aber starre Kopien willst (was ich nicht glauben will) musst du abklären welches Ereignis (welche Ereignisse) den Kopiervorgang startet. Jede Eingabe in einer der Quellzellen dürfe nicht so recht sinnvoll sein, vielleicht stattdessen beim Schließen der Mappe, beim Wechsle auf eines der Zielblätter?

Was also willst du denn genau erreichen? Daten spiegeln oder physisch wegkopieren (aber das 5-mal??)

CN8
 
Zurück
Oben