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

Shapes zentrieren im bestimmten Bereich

Forumthread: Shapes zentrieren im bestimmten Bereich

Shapes zentrieren im bestimmten Bereich
25.11.2018 23:03:04
Fred
Hallo zusammen
Ich habe eine Tabell mit bis zu hunderten Shapes und habe im Netzt einen Code gefunden, womit ich diese in der Zelle zentrieren kann. Das Problem ist wenn ich den Code für das ganze Blatt anwende funktioniert er sehr gut, zerstörrt dann aber die Ansicht meiner Tabelle. Deshalb habe ich gedacht ich beschränke den Code auf einen Bestimmten Bereich damit meine Tabelle erhalten bleibt dann meckert aber der Debugger rum das das Objekt nicht unterstütz wird. Weis jemand Rat wie ich den Code abändern müsste damit nur im Bereich A3 Bis W32 die Shapes zentriert werden?

Public Sub Center_Picture()
Dim objShape As Shape
For Each objShape In Sheets("Brandschutz_Kreuz").Range("A3:W32").Shapes
With objShape
If .Type = msoPicture Then
.Left = .TopLeftCell.Left + .TopLeftCell.Width / 2 - .Width / 2
.Top = .TopLeftCell.Top + .TopLeftCell.Height / 2 - .Height / 2
End If
End With
Next
End Sub
Userbild
Grüße fred
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Shapes zentrieren im bestimmten Bereich
25.11.2018 23:50:23
Mullit
Hallo,
daschja klaro, ein Range-Bereich besitzt keine Shapes-Collection, das mußt Du zwischendurch abfragen:
Option Explicit
Public Sub Center_Picture()
Dim objShape As Shape
For Each objShape In Worksheets("Brandschutz_Kreuz").Shapes
With objShape
If .Type = msoPicture Then
If Not Intersect(.TopLeftCell, Worksheets("Brandschutz_Kreuz").Range("A3:W32"))  _
Is Nothing Then
.Left = .TopLeftCell.Left + .TopLeftCell.Width / 2 - .Width / 2
.Top = .TopLeftCell.Top + .TopLeftCell.Height / 2 - .Height / 2
End If
End If
End With
Next
End Sub

Gruß, Mullit
Anzeige
AW: Shapes zentrieren im bestimmten Bereich
26.11.2018 11:23:36
Fred
Hallo Mullit
Vielen Dank für Deine Antwort funktioniert Prima. Dankeschön.
Grüße Fred
Anzeige

Infobox / Tutorial

Shapes zentrieren im bestimmten Bereich


Schritt-für-Schritt-Anleitung

Um Shapes in einem bestimmten Bereich, wie zum Beispiel A3 bis W32, in Excel zu zentrieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code überprüft, ob sich die Shapes innerhalb des angegebenen Bereichs befinden und zentriert sie entsprechend.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Kopiere und füge den folgenden Code in das Modul ein:
Option Explicit
Public Sub Center_Picture()
    Dim objShape As Shape
    For Each objShape In Worksheets("Brandschutz_Kreuz").Shapes
        With objShape
            If .Type = msoPicture Then
                If Not Intersect(.TopLeftCell, Worksheets("Brandschutz_Kreuz").Range("A3:W32")) Is Nothing Then
                    .Left = .TopLeftCell.Left + .TopLeftCell.Width / 2 - .Width / 2
                    .Top = .TopLeftCell.Top + .TopLeftCell.Height / 2 - .Height / 2
                End If
            End If
        End With
    Next
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus, um die Shapes zu zentrieren. Du kannst dies über Entwicklertools > Makros tun und das entsprechende Makro auswählen.

Häufige Fehler und Lösungen

  • Fehlermeldung: "Objekt nicht unterstützt"

    • Ursache: Der Fehler tritt auf, wenn Du versuchst, Shapes in einem Range-Bereich zu zentrieren, da ein Range keine Shapes-Collection hat.
    • Lösung: Verwende den angepassten Code, der alle Shapes durchläuft und nur die im angegebenen Bereich zentriert.
  • Shapes werden nicht zentriert

    • Ursache: Die Shapes befinden sich möglicherweise außerhalb des angegebenen Bereichs oder sind nicht vom Typ msoPicture.
    • Lösung: Stelle sicher, dass die Shapes im Bereich A3 bis W32 liegen und überprüfe den Typ der Shapes.

Alternative Methoden

Eine alternative Methode, um Shapes zu zentrieren, besteht darin, eine benutzerdefinierte Funktion zu verwenden, die auch andere Formen (z.B. Rechtecke, Ellipsen) berücksichtigt. Hier ist ein Beispiel:

Public Sub Center_All_Shapes()
    Dim objShape As Shape
    For Each objShape In Worksheets("Brandschutz_Kreuz").Shapes
        If Not Intersect(objShape.TopLeftCell, Worksheets("Brandschutz_Kreuz").Range("A3:W32")) Is Nothing Then
            objShape.Left = (objShape.TopLeftCell.Left + objShape.TopLeftCell.Width / 2) - (objShape.Width / 2)
            objShape.Top = (objShape.TopLeftCell.Top + objShape.TopLeftCell.Height / 2) - (objShape.Height / 2)
        End If
    Next
End Sub

Praktische Beispiele

Angenommen, Du hast in einem Excel-Blatt Shapes, die verschiedene Grafiken darstellen, und möchtest diese in den Zellen A3 bis W32 zentrieren. Mit dem bereitgestellten VBA-Code kannst Du dies schnell und effizient erledigen. Teste den Code, indem Du einige Shapes in den angegebenen Bereich einfügst und das Makro ausführst.


Tipps für Profis

  • Makros speichern: Vergiss nicht, Deine Datei im .xlsm-Format zu speichern, um die Makros zu behalten.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen in Deinen Code ein, um unerwartete Probleme zu vermeiden.
  • Optimierung: Wenn Du viele Shapes hast, kann es hilfreich sein, die Shapes in Gruppen zu organisieren, um die Performance zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um nur bestimmte Shapes zu zentrieren?
Du kannst Bedingungen hinzufügen, um nur Shapes mit bestimmten Namen oder Typen zu zentrieren.

2. Funktioniert dieser Code in Excel 2016 und älteren Versionen?
Ja, der Code sollte in Excel 2016 sowie in älteren Versionen funktionieren. Achte jedoch darauf, dass die Entwicklertools aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige