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

Forumthread: VBA: Wie frisch erstelltes Shape verändern

VBA: Wie frisch erstelltes Shape verändern
Berndi
Hallo !
Ich habe folgendes Problem:
Ich rufe in einem Modul mit CommandBars.FindControl(ID:=1177).Execute die Funktion zum Erstellen eines Shapes auf.
Nachdem der Bediener dann geklickt hat, erscheint das Shape auch ordentlich auf der Seite.
Ich möchte jetzt jedoch das Shape von Aussehen her verändern, weiß jedoch nicht so recht wie ich das anstellen soll.
Dabei geht es nicht um die Art und Weise der Veränderung des Aussehens, sodern eher darum, wie ich das erstellte Shape ansteuere ...
Kann mir bitte jemand helfen ?
Gruß,
Berndi
Anzeige
AW: VBA: Wie frisch erstelltes Shape verändern
06.11.2011 10:27:41
Nepumuk
Hallo,
wie wäre es denn mit:
Liebes frisch erstelltes Shape ....
oder so:
Public Sub test()
    Dim objShape As Shape
    Set objShape = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
    With objShape
        .Top = 0
        .Left = 0
    End With
    Set objShape = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA: Wie frisch erstelltes Shape verändern
06.11.2011 10:51:10
Berndi
Danke für die Antwort, aber leider klappt das nicht, denn das Makro läuft bei CommandBars.FindControl(ID:=1177).Execute weiter, sodass Dein Vorschlag ohne Effekt durchläuft, da ja noch kein Shape existiert.
Public Sub test()
CommandBars.FindControl(ID:=1177).Execute
Dim objShape As Shape
Set objShape = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
With objShape
.Top = 0
.Left = 0
End With
Set objShape = Nothing
End Sub

Anzeige
AW: VBA: Wie frisch erstelltes Shape verändern
06.11.2011 11:15:31
Berndi
Danke für die Antwort, aber leider klappt das nicht, denn das Makro läuft bei CommandBars.FindControl(ID:=1177).Execute weiter, sodass Dein Vorschlag ohne Effekt durchläuft, da ja noch kein Shape existiert.
Public Sub test()
CommandBars.FindControl(ID:=1177).Execute
Dim objShape As Shape
Set objShape = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
With objShape
.Top = 0
.Left = 0
End With
Set objShape = Nothing
End Sub

Anzeige
AW: VBA: Wie frisch erstelltes Shape verändern
06.11.2011 10:49:39
Reinhard
Hallo Bernd,
das geht in einem Makro m.E. mit Execute nicht denn nach Execute ist ja das Shape
noch gar nicht auf dem Blatt, auf dem Blatt sieht man nur das Kreuzchen womit du das Shape erst noch einfügen mußt.
Beweis:
Sub nn()
CommandBars.FindControl(ID:=1177).Execute
MsgBox ActiveSheet.Shapes.Count
End Sub
Eine Alternative ist sowas:

Sub Makro2()
Dim CB As Object
Set CB = ActiveSheet.Shapes.AddShape(msoShapeLineCallout3, 100, 100, 100, 100)
With CB.OLEFormat.Object
.Text = "huhu"
.Left = 300
.Top = 100
.Width = 50
.Height = 80
With .Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
.ShapeRange.Adjustments.Item(1) = -13.0606
.ShapeRange.Adjustments.Item(2) = 1.5283
.ShapeRange.Adjustments.Item(3) = -0.9697
.ShapeRange.Adjustments.Item(4) = -0.5944
.ShapeRange.Adjustments.Item(5) = 0.5909
.ShapeRange.Adjustments.Item(6) = 0.1321
End With
End Sub

Gruß
Reinhard
Anzeige
AW: VBA: Wie frisch erstelltes Shape verändern
06.11.2011 12:17:41
Berndi
Danke für den Hinweis, aber das ist keine Alternative, denn ich möchte, dass das Shape an der Cursorposition erstellt wird.
Gruß,
Berndi
AW: VBA: Wie frisch erstelltes Shape verändern
06.11.2011 16:26:44
Reinhard
Hallo Bernd,
was genau bedeute "Curserposition"?
Irgendwie heißt das, du versciebst dann im Blatt den Curser der halt grad ein Kreuz ist
und "ziehst" dann die Form auf.
So wie ich da deine Form deute willst du z.B. für Zelle D5 so eine Form erstellen, d.h. diese geknickte
Linie soll von Zelle D5 zu dem "Textfeld" der Form gehen.
Das kann man doch mit meinem Code erreichen, du markierst D5 und startest das makro.
Dann mußt du das nicht manuell positionieren.
Natürlich müßte man dazu den Code anpassen aber prinzipiell sollte das gehen *glaub*
Gruß
Reinhard
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Shape in Excel VBA verändern: Eine praktische Anleitung


Schritt-für-Schritt-Anleitung

Um ein frisch erstelltes Shape in Excel mit VBA zu verändern, gehe folgendermaßen vor:

  1. Shape erstellen: Nutze CommandBars.FindControl(ID:=1177).Execute, um ein Shape zu erstellen. Stelle sicher, dass der Benutzer die Cursorposition hat, an der das Shape eingefügt werden soll.

  2. Shape ansteuern: Nach der Erstellung des Shapes kannst du es mit ActiveSheet.Shapes(ActiveSheet.Shapes.Count) ansteuern, um auf das zuletzt erstellte Shape zuzugreifen.

  3. Ändern der Eigenschaften: Verwende eine With-Anweisung, um die Eigenschaften des Shapes anzupassen. Beispielsweise kannst du die Position und den Text des Shapes ändern:

    Public Sub ShapeAnpassen()
       CommandBars.FindControl(ID:=1177).Execute
       Dim objShape As Shape
       Set objShape = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
    
       With objShape
           .Top = 100 ' y-Position
           .Left = 100 ' x-Position
           .TextFrame.Characters.Text = "Neuer Text"
       End With
    
       Set objShape = Nothing
    End Sub

Häufige Fehler und Lösungen

  1. Shape nicht gefunden: Wenn das Shape nicht gefunden wird, könnte es sein, dass der Execute-Befehl noch nicht abgeschlossen ist. Stelle sicher, dass du den Zugriff auf das Shape erst nach der Ausführung des Befehls versuchst.

  2. Makro läuft weiter: Wenn das Makro bei CommandBars.FindControl(ID:=1177).Execute weiterläuft, ohne dass das Shape erstellt wurde, musst du sicherstellen, dass die Cursorposition korrekt erfasst wird und das Shape tatsächlich erstellt wird.


Alternative Methoden

Falls du das Shape an einer bestimmten Position erstellen möchtest, kannst du ActiveSheet.Shapes.AddShape verwenden. Hier ein Beispiel:

Sub ShapeErstellen()
    Dim neuesShape As Shape
    Set neuesShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 100, 100) ' x, y, Breite, Höhe
    With neuesShape
        .TextFrame.Characters.Text = "Ich bin ein Shape"
        .Fill.ForeColor.RGB = RGB(255, 0, 0) ' Füllfarbe rot
    End With
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Shapes erstellen und anpassen kannst:

  1. Form mit Text:

    Sub ShapeMitText()
       Dim meinShape As Shape
       Set meinShape = ActiveSheet.Shapes.AddShape(msoShapeOval, 200, 200, 100, 100)
       meinShape.TextFrame.Characters.Text = "Kreis"
    End Sub
  2. Shape an Cursorposition:

    Sub ShapeAnCursor()
       Dim objShape As Shape
       Set objShape = ActiveSheet.Shapes.AddShape(msoShapeLineCallout1, _
                                                  Application.ActiveCell.Left, _
                                                  Application.ActiveCell.Top, 100, 100)
       objShape.TextFrame.Characters.Text = "Linie"
    End Sub

Tipps für Profis

  • Nutze vba graphics, um Shapes mit komplexen Designs zu erstellen.
  • Experimentiere mit der Adjustments-Eigenschaft von Shapes, um deren Form zu verändern.
  • Verwende vba shape text, um dynamische Texte in Shapes zu integrieren.

FAQ: Häufige Fragen

1. Wie kann ich die Farbe eines Shapes ändern?
Du kannst die Füllfarbe eines Shapes mit .Fill.ForeColor.RGB anpassen.

2. Was ist der Unterschied zwischen Shapes.Count und Shapes(Shapes.Count)?
Shapes.Count gibt die Gesamtanzahl der Shapes zurück. Shapes(Shapes.Count) greift auf das zuletzt erstellte Shape zu.

3. Kann ich Shapes animieren?
Ja, du kannst Animationen in Excel VBA implementieren, indem du die Position und Eigenschaften von Shapes in einer Schleife änderst.

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