Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Grafische Objekte kopieren

Grafische Objekte kopieren
Alfonso
Hallo Excel-Profis,
heute habe ich mal wieder ein spezielles Problem:
Ich bekomme regelmäßig von Mitarbeitern eine Excel-Datei, bei der über den Weg „Einfügen – Objekt – Aus Datei erstellen – (Datei auswählen) - Als Symbol“ 1- 5 Dateiobjekte in der Arbeitsmappe zur Verfügung gestellt.
Dabei handelt es um unterschiedliche Dateitypen (z.B. .docx, pdf, pic, jpeg usw.).
Diese Symbol-Objekte muss ich jedesmal in meine Excel-Arbeitsmappe per Kopierbefehl übernehmen. Ich würde das aber gerne mit VBA automatisieren, bin aber noch nicht so Profi in VBA, dass ich das selbst lösen könnte. Ich habe das auch schon selbst versucht, bin aber daran gescheitert, dass die Objek-Nummern nicht immer fortlaufend sind und die Anzahl der eingefügten Objekte immer unterschiedlich ist.
Für eine entsprechende Lösung in VBA wäre ich sehr dankbar.
MfG
Alfonso
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Grafische Objekte kopieren
05.04.2012 01:21:34
fcs
Hallo Helmut alias Alfonso,
hier mein Vorschlag für das Kopieren.
Nach Selektion der Zelle, ab der eingefügt werden soll, das Makro starten.
Datei-Auswahldialog wird geöffnet, in dem Datei mit den zu kopierenden Symbolen ausgewählt wird.
Das Makro kopiert dann nacheinander die Symbole eines bestimmten Typs.
Das Makro fügt die Symbole untereinander in der Zieldatei ein. Das kann man natürlich noch anpassen, indem man die Top. bzw. Left-Position des kopierten Symbols in der gewünschten Form berechnet.
Gruß
Franz
'Makro in einem allgemeinen Modul
Sub SymboleKopieren()
' SymboleKopieren Makro
Dim varAuswahl As Variant
Dim wbkZiel As Workbook, wbkQuelle As Workbook
Dim ZelleZiel As Range, objShape As Shape, objShape2 As Shape
Dim wksZiel As Worksheet, wksQuelle As Worksheet
If MsgBox("Symbole aus auszuwählender Datei ab der aktiven Zelle einfügen?", _
vbOKCancel + vbQuestion, "Symbole für Dateien kopieren") = vbNo Then GoTo Beenden
Set wksZiel = ActiveSheet
Set wbkZiel = ActiveWorkbook
Set ZelleZiel = ActiveCell
'Datei mit eingebetteten Symbolen zum Öffnen auswählen
varAuswahl = Application.GetOpenFilename(FileFilter:="Excelfiles (*.xls*),.xls*")
If varAuswahl  False Then
'Quelldatei öffnen
Set wbkQuelle = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
'Blatt mit den Symbolen setzen
Set wksQuelle = wbkQuelle.Sheets(1)
For Each objShape In wksQuelle.Shapes
If objShape.Type = 7 Then 'msoEmbeddedOLEObject
objShape.Copy
wksZiel.Paste
With wksZiel
Set objShape2 = .Shapes(.Shapes.Count)
End With
With objShape2
.Top = ZelleZiel.Top + 2
.Left = ZelleZiel.Left + 3
Set ZelleZiel = wksZiel.Cells(.BottomRightCell.Row + 1, ZelleZiel.Column)
End With
End If
Next
wbkQuelle.Close savechanges:=False
ZelleZiel.Select
End If
Beenden:
Set wbkZiel = Nothing: Set wbkQuelle = Nothing
Set ZelleZiel = Nothing: Set objShape = Nothing: Set objShape2 = Nothing
Set wksZiel = Nothing: Set wksQuelle = Nothing
End Sub

Anzeige
AW: Grafische Objekte kopieren
09.04.2012 12:10:51
Alfonso
Hallo Franz,
darf ich zu Deiner Antwort noch eine Bitte äußern?
Ich kriege das nicht hin, dass die shapes in der Ziel-Datei in Spalten nebeneinander aber in einer Zeile eingefügt werden.
Vielen Dank nochmals für Deine Unterstützung.
Gruß
Helmut
AW: Grafische Objekte kopieren
09.04.2012 15:06:35
fcs
Hallo Helmut,
ich hab das Makro mal so umgeschrieben, dass das Einfügen der Symbole über Parameter gesteuert wird.
Gruß
Franz
'Makros in einem allgemeinen Modul
Sub SymboleKopieren_Zeile_Abstand_fest()
'Symbole in Zeile kopieren mit destem Abstand zwischen Symbolen
Call SymboleKopieren(dblAbstand:=4, AbstandZelle:=2)
End Sub
Sub SymboleKopieren_Zeile_Abstand_Spalte()
'Symbole in Zeile kopieren, einfügen immer in nächste Spalte
Call SymboleKopieren(AbstandZelle:=2)
End Sub
Sub SymboleKopieren_Spalte_Abstand_Zeile()
'Symbole in Spalte kopieren, einfügen immer in nächste Zeile
Call SymboleKopieren(bolZeile:=False, AbstandZelle:=2)
End Sub
Sub SymboleKopieren_Spalte_Abstand_fest()
'Symbole in Spalte kopieren mit destem Abstand zwischen Symbolen
Call SymboleKopieren(bolZeile:=False, dblAbstand:=4, AbstandZelle:=2)
End Sub
Sub SymboleKopieren(Optional bolZeile As Boolean = True, _
Optional dblAbstand As Double = 0, _
Optional AbstandZelle As Double = 2)
'  SymboleKopieren aus zu öffnender Datei  und ab aktiver Zelle einfügen
'  bolZeile: True  --> Symbole in Zeile nebeneinander
'  bolZeile: False --> Symbole in Spalte untereinander
'  dblAbstand = 0  --> Symbol in Spalte/Zeile rechts/unterhalb des vorherigen Symbols
'               >0 --> Symbol mit festem Abstand rechts/unterhalb des vorherigen Symbols
'  AbstandZelle = Abstand des Symbols vom linken/oberem Rand der Zellen
Dim varAuswahl As Variant
Dim wbkZiel As Workbook, wbkQuelle As Workbook
Dim ZelleZiel As Range, objShape As Shape, objShape2 As Shape
Dim wksZiel As Worksheet, wksQuelle As Worksheet
Dim dblTop As Double, dblLeft As Double
If MsgBox("Symbole aus auszuwählender Datei ab der aktiven Zelle einfügen?", _
vbOKCancel + vbQuestion, "Symbole für Dateien kopieren") = vbNo Then GoTo Beenden
Set wksZiel = ActiveSheet
Set wbkZiel = ActiveWorkbook
Set ZelleZiel = ActiveCell
'Einfüge-Position für erstes Symbol
dblTop = ZelleZiel.Top + AbstandZelle
dblLeft = ZelleZiel.Left + AbstandZelle
'Datei mit eingebetteten Symbolen zum Öffnen auswählen
varAuswahl = Application.GetOpenFilename(FileFilter:="Excelfiles (*.xls*),.xls*")
If varAuswahl  False Then
'Quelldatei öffnen
Set wbkQuelle = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
'Blatt mit den Symbolen setzen
Set wksQuelle = wbkQuelle.Sheets(1)
For Each objShape In wksQuelle.Shapes
If objShape.Type = 7 Then 'msoEmbeddedOLEObject
objShape.Copy
wksZiel.Paste
With wksZiel
Set objShape2 = .Shapes(.Shapes.Count)
End With
With objShape2
.Top = dblTop
.Left = dblLeft
'Position des nächsten Symbols
If bolZeile = True Then 'anordnen in Zeile nebeneinander
dblTop = dblTop
If dblAbstand = 0 Then
'nächste Symbol in nächste Spalte rechts vom Symbol
Set ZelleZiel = wksZiel.Cells(ZelleZiel.Row, .BottomRightCell.Offset(0, 1).Column) _
dblLeft = ZelleZiel.Left + AbstandZelle
Else
'nächste Symbol mit festem Abstand rechts vom vorherigen Symbol
dblLeft = dblLeft + .Width + dblAbstand
End If
Else 'anordnen in Spalte untereinander
dblLeft = dblLeft
If dblAbstand = 0 Then
Set ZelleZiel = wksZiel.Cells(.BottomRightCell.Offset(1, 0).Row, _
ZelleZiel.Column)
dblTop = ZelleZiel.Top + AbstandZelle
Else
dblTop = dblTop + .Height + dblAbstand
End If
End If
End With
End If
Next
wbkQuelle.Close savechanges:=False
If bolZeile = True Then
If Not objShape2 Is Nothing Then
Set ZelleZiel = wksZiel.Cells(objShape2.BottomRightCell.Row + 1, _
ActiveCell.Column)
End If
Else
If Not objShape2 Is Nothing Then
Set ZelleZiel = wksZiel.Cells(objShape2.BottomRightCell.Offset(1, 0).Row, _
ZelleZiel.Column)
End If
End If
ZelleZiel.Select
End If
Beenden:
Set wbkZiel = Nothing: Set wbkQuelle = Nothing
Set ZelleZiel = Nothing: Set objShape = Nothing: Set objShape2 = Nothing
Set wksZiel = Nothing: Set wksQuelle = Nothing
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Grafische Objekte in Excel effizient kopieren


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und erstelle ein neues Modul. Gehe dazu auf Entwicklertools > Visual Basic > Einfügen > Modul.

  2. VBA-Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    'Makro in einem allgemeinen Modul
    Sub SymboleKopieren()
       Dim varAuswahl As Variant
       Dim wbkZiel As Workbook, wbkQuelle As Workbook
       Dim ZelleZiel As Range, objShape As Shape, objShape2 As Shape
       Dim wksZiel As Worksheet, wksQuelle As Worksheet
    
       If MsgBox("Symbole aus auszuwählender Datei ab der aktiven Zelle einfügen?", vbOKCancel + vbQuestion, "Symbole für Dateien kopieren") = vbNo Then GoTo Beenden
    
       Set wksZiel = ActiveSheet
       Set wbkZiel = ActiveWorkbook
       Set ZelleZiel = ActiveCell
    
       'Datei mit eingebetteten Symbolen zum Öffnen auswählen
       varAuswahl = Application.GetOpenFilename(FileFilter:="Excelfiles (*.xls*),.xls*")
       If varAuswahl <> False Then
           Set wbkQuelle = Application.Workbooks.Open(Filename:=varAuswahl, ReadOnly:=True)
           Set wksQuelle = wbkQuelle.Sheets(1)
    
           For Each objShape In wksQuelle.Shapes
               If objShape.Type = 7 Then 'msoEmbeddedOLEObject
                   objShape.Copy
                   wksZiel.Paste
                   With wksZiel
                       Set objShape2 = .Shapes(.Shapes.Count)
                   End With
                   With objShape2
                       .Top = ZelleZiel.Top + 2
                       .Left = ZelleZiel.Left + 3
                       Set ZelleZiel = wksZiel.Cells(.BottomRightCell.Row + 1, ZelleZiel.Column)
                   End With
               End If
           Next
           wbkQuelle.Close savechanges:=False
           ZelleZiel.Select
       End If
    Beenden:
       Set wbkZiel = Nothing: Set wbkQuelle = Nothing
       Set ZelleZiel = Nothing: Set objShape = Nothing: Set objShape2 = Nothing
       Set wksZiel = Nothing: Set wksQuelle = Nothing
    End Sub
  3. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Wähle die Zelle aus, ab der die Objekte eingefügt werden sollen, und führe das Makro aus.

  4. Datei auswählen: Ein Dialog öffnet sich, in dem Du die Excel-Datei mit den grafischen Objekten auswählen kannst.

  5. Symbole einfügen: Die Symbole werden ab der aktiven Zelle eingefügt.


Häufige Fehler und Lösungen

  • Fehler: "Objekt kann nicht eingefügt werden"
    Lösung: Stelle sicher, dass die Quelle tatsächlich eingebettete OLE-Objekte enthält. Überprüfe auch, ob die Datei korrekt geöffnet wurde.

  • Fehler: Die Symbole überschneiden sich
    Lösung: Achte darauf, dass der Abstand zwischen den Objekten richtig eingestellt ist. Verwende die Parameter im Makro, um einen festen Abstand beim Einfügen der Objekte zu definieren.


Alternative Methoden

Eine alternative Methode zum Kopieren von Objekten ist die Verwendung des Einfügen-Menüs in Excel. Du kannst Objekte manuell kopieren und einfügen, was jedoch zeitaufwendiger ist. Die VBA-Methode ist effizienter, insbesondere wenn Du viele Objekte gleichzeitig bearbeiten musst.


Praktische Beispiele

  • Symbole in einer Zeile anordnen: Verwende den angepassten VBA-Code, um Symbole in einer Zeile mit einem festgelegten Abstand zwischen ihnen einzufügen.

    Sub SymboleKopieren_Zeile_Abstand_fest()
       Call SymboleKopieren(dblAbstand:=4, AbstandZelle:=2)
    End Sub
  • Symbole in einer Spalte anordnen: Ändere die Parameter im Makro, um die Symbole untereinander einzufügen.

    Sub SymboleKopieren_Spalte_Abstand_fest()
       Call SymboleKopieren(bolZeile:=False, dblAbstand:=4, AbstandZelle:=2)
    End Sub

Tipps für Profis

  • VBA anpassen: Passe den VBA-Code an Deine spezifischen Bedürfnisse an, indem Du die Abstände und die Anordnung der Symbole variierst.
  • Verwendung von Platzhaltern: Nutze Platzhalter oder Variablen, um die Lesbarkeit und Wartbarkeit des Codes zu erhöhen.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung im VBA-Code, um mögliche Probleme während der Ausführung des Makros zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich den Abstand zwischen den Symbolen anpassen?
Du kannst den Abstand im VBA-Code ändern, indem Du den Parameter dblAbstand anpasst, um den gewünschten Abstand zwischen den Symbolen festzulegen.

2. Kann ich verschiedene Dateitypen kopieren?
Ja, die Methode unterstützt verschiedene Dateitypen, solange sie als OLE-Objekte in Excel eingefügt sind, wie z.B. .docx, pdf, jpeg, etc.

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