Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro: Shape in beliebiges Tabellenblatt kopieren

Forumthread: Makro: Shape in beliebiges Tabellenblatt kopieren

Makro: Shape in beliebiges Tabellenblatt kopieren
25.09.2013 09:43:18
Elke
Liebe Experten,
ich habe folgendes Problem: Ich möchte mir aus einem Tabellenblatt "Vorlage" einzelne Shapes in ein beliebiges anderes Tabellenblatt kopieren. Ich habe nun sowohl das Shape als auch die Zelle benannt und das Shape mit der Zelle verbunden, damit habe ich es geschafft das Shape in die Zelle zu kopieren welche ich markiert habe.
Was ich nicht schaffe ist: Das ich auch das Shape in ein beliebiges Tabellenblatt kopieren kann. --> Nimmt mir immer das von mir aufgezeichnete Tabellenblatt, egal in welchem Tabellenblatt ich gerade bin, habe schon versucht das selber im Makro anzupassen, bisher leider ohne Erfolg.
Für Vorschläge wäre ich sehr dankbar!
LG Elke
Nachstehend das original aufgezeichnete Makro
Sub Test()
' Test Makro
Sheets("Vorlage").Select
Range("A2").Select
Selection.Copy
Sheets("14_").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Makro: Shape in aktuellesTabellenblatt kopieren
25.09.2013 11:00:53
NoNet
Liebe Elke,
der Fehler liegt in der Logik des Codes : Nach dem Aktivieren des Blattes "Vorlage", wird im Code wieder das Blatt "14_" aktiviert, also dort hinein kopiert.
Es gibt jedoch Möglichkeiten das zu umgehen :
z.B. : Die Zelle und Shape kopieren OHNE das Blatt zu wechseln :
Sub KopiereZelleUndShape1()
'Zelle in aktive Zelle des aktuellen Blattes kopieren :
Sheets("Vorlage").Range("A2").Copy
ActiveSheet.Paste
'Shape "ShapeName" kopieren - direkt auf aktive Zelle
Sheets("Vorlage").Shapes("ShapeName").Copy
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
oder zusammengefasste :
Sub KopiereZelleUndShape2()
With Sheets("Vorlage")
'Zelle in aktive Zelle des aktuellen Blattes kopieren :
.Range("A2").Copy ActiveCell
'Shape "ShapeName" kopieren - direkt auf aktive Zelle
.Shapes("ShapeName").Copy
ActiveSheet.Paste
End With
Application.CutCopyMode = False
End Sub
Den Namen des benannten Shapes (hier im Code "ShapeName") musst Du im Code an den tatsächlichen Namen anpassen !
Man könnte auch das "aktuelle" Blatt zuvor in einer Variablen speichern und dieses wieder aktivieren, das ist in deinem Fall jedoch nicht notwendig !
Gruß, NoNet
Hast Du Interesse, andere Excel-Begeisterte kennenzulernen ? - Dann komme zum
Exceltreffen 11.-13.10.2013 in Duisburg

http://www.exceltreffen.de/index.php?page=230
Schau doch mal rein !

Anzeige
AW: Makro: Shape in aktuellesTabellenblatt kopieren
25.09.2013 11:24:38
Elke
Hallo NoNet,
funktioniert super, vielen Dank!
Habe jetzt noch die Range herausgenommen (damit hat er nämlich das Shape doppelt kopiert --> einmal mit der Zelle und einmal als Shape)!
Jetzt habe ich noch eine Frage: ich habe das Shape so formatiert, das es immer in der Mitte der Zelle sein sollte über die "Koordinaten, gibt es eine einfachere Möglichkeit als ich das gemacht habe?
Siehe nachstehend
Sub Testx()
With Sheets("Vorlage")
'Shape "ShapeName" kopieren - direkt auf aktive Zelle
.Shapes("ShapeA").Copy
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft 34.687480315
Selection.ShapeRange.IncrementTop 10.3124409449
End With
Application.CutCopyMode = False
End Sub

Anzeige
Shape mathematisch zentriert positionieren
25.09.2013 12:01:15
NoNet
Hallo Elke,
das kopierte Shape kann man in Abhängigkeit der Zellgröße und der Shapegröße folgendermassen mittig (zentriert) positionieren :
Sub Testx()
With Sheets("Vorlage")
'Shape "ShapeName" kopieren - direkt auf aktive Zelle
.Shapes("ShapeA").Copy
ActiveSheet.Paste
With Selection
.Left = .TopLeftCell.Left + (.TopLeftCell.Width - .Width) / 2
.Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
End With
End With
Application.CutCopyMode = False
End Sub
Salut, NoNet

Anzeige
AW: Makro: Shape in aktuellesTabellenblatt kopieren
25.09.2013 12:04:56
Rudi
Hallo,
die Position kannst du berechnen.
Sub Testx()
Sheets("Vorlage").Shapes("ShapeA").Copy
ActiveSheet.Paste
With Selection.ShapeRange
.Top = ActiveCell.Top + (ActiveCell.Height - .Height) / 2
.Left = ActiveCell.Left + (ActiveCell.Width - .Width) / 2
End With
Application.CutCopyMode = False
End Sub

Gruß
Rudi

Anzeige
AW: Makro: Shape in aktuellesTabellenblatt kopieren
25.09.2013 12:26:29
Elke
Hallöchen,
ihr seid`s super! Funktioniert perfekt!
Habe mir die Makros zu den einzelnen Shapes schon auf eine eigene Menüleiste gelegt und auf geht's!
Danke vielmals!
LG Elke
;
Anzeige
Anzeige

Infobox / Tutorial

Shapes in beliebige Tabellenblätter kopieren


Schritt-für-Schritt-Anleitung

Um ein Shape aus einem bestimmten Tabellenblatt in ein beliebiges anderes Tabellenblatt zu kopieren, kannst du das folgende VBA-Makro verwenden:

Sub KopiereZelleUndShape()
    ' Shape und Zelle aus dem Blatt "Vorlage" kopieren
    Sheets("Vorlage").Range("A2").Copy
    ActiveSheet.Paste
    ' Shape "ShapeName" kopieren - direkt auf aktive Zelle
    Sheets("Vorlage").Shapes("ShapeName").Copy
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

In diesem Beispiel wird der Inhalt der Zelle A2 sowie das Shape mit dem Namen "ShapeName" in das aktuell aktive Blatt kopiert. Achte darauf, den Namen des Shapes im Code an deinen tatsächlichen Namen anzupassen.


Häufige Fehler und Lösungen

Ein häufiges Problem, das beim Kopieren von Shapes auftritt, ist, dass das Makro immer das gleiche Zielblatt auswählt, anstatt das aktuell aktive Blatt zu verwenden. Um dies zu vermeiden, stelle sicher, dass du ActiveSheet verwendest, wie im oben genannten Beispiel gezeigt.

Wenn das Shape doppelt kopiert wird, entferne die Zeile, die das Shape separat kopiert, wenn du es bereits zusammen mit der Zelle kopierst.


Alternative Methoden

Es gibt auch andere Möglichkeiten, Shapes zu kopieren. Hier ist eine zusammengefasste Methode, die die Verwendung von With zur Vereinfachung des Codes zeigt:

Sub KopiereZelleUndShapeMitWith()
    With Sheets("Vorlage")
        .Range("A2").Copy ActiveCell
        .Shapes("ShapeName").Copy
        ActiveSheet.Paste
    End With
    Application.CutCopyMode = False
End Sub

Diese Methode ist effizient und reduziert den Codeaufwand, indem sie das Zielblatt nur einmal angibt.


Praktische Beispiele

Um das kopierte Shape mittig in der Zelle zu positionieren, kannst du den folgenden Code verwenden:

Sub ZentriereShape()
    With Sheets("Vorlage")
        .Shapes("ShapeA").Copy
        ActiveSheet.Paste
        With Selection
            .Left = .TopLeftCell.Left + (.TopLeftCell.Width - .Width) / 2
            .Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
        End With
    End With
    Application.CutCopyMode = False
End Sub

Dieser Code sorgt dafür, dass das Shape in der Mitte der Zelle positioniert wird, was eine ansprechende Darstellung bietet.


Tipps für Profis

  • Namen konsistent halten: Achte darauf, dass die Namen der Shapes und Zellen konsistent sind, um Verwirrungen im Code zu vermeiden.
  • Makros testen: Teste deine Makros immer in einer Kopie der Datei, um Datenverlust zu vermeiden.
  • Fehlerbehandlung einbauen: Füge Fehlerbehandlungsroutinen hinzu, um mögliche Laufzeitfehler besser zu managen.

FAQ: Häufige Fragen

1. Wie kann ich ein Shape in ein spezifisches Blatt kopieren?
Du kannst das Zielblatt einfach in den Code einfügen, indem du Sheets("NameDesBlattes").Paste anstelle von ActiveSheet.Paste verwendest.

2. Was ist der Unterschied zwischen ActiveSheet und Sheets("Name")?
ActiveSheet bezieht sich auf das aktuell aktive Blatt, während Sheets("Name") ein spezifisches Blatt direkt anspricht, unabhängig davon, ob es aktiv ist oder nicht.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige