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

Forumthread: VBA: AddShape

VBA: AddShape
Torsten
Hallo beisammen,
ich brauche Hilfe für die richtige Syntax eines Codes, den ich zunächst über den Makrorekorder aufgezeichnet habe:
' ActiveSheet.Shapes.AddShape(msoShapeOval, 273#, 764.25, 80.25, 38.25).Select
' Selection.ShapeRange.Fill.Visible = msoFalse
' Selection.ShapeRange.Fill.Solid
' Selection.ShapeRange.Fill.Transparency = 0#
' Selection.ShapeRange.Line.Weight = 2.25
' Selection.ShapeRange.Line.DashStyle = msoLineSolid
' Selection.ShapeRange.Line.Style = msoLineSingle
' Selection.ShapeRange.Line.Transparency = 0#
' Selection.ShapeRange.Line.Visible = msoTrue
' Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
' Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
und nun bearbeitet habe. Allerdings kommt noch eine Fehlermeldung "Anwendungs- oder objektorientierter Fehler". Excel springt dann in die 1. Zeile des Codes.
With ActiveSheet
.Shapes.AddShape msoShapeOval, 273#, 764.25, 80.25, 38.25
.ShapeRange.Fill.Visible = msoFalse
.ShapeRange.Fill.Solid
.ShapeRange.Fill.Transparency = 0#
.ShapeRange.Line.Weight = 2.25
.ShapeRange.Line.DashStyle = msoLineSolid
.ShapeRange.Line.Style = msoLineSingle
.ShapeRange.Line.Transparency = 0#
.ShapeRange.Line.Visible = msoTrue
.ShapeRange.Line.ForeColor.SchemeColor = 10
.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
End With
Könnt Ihr mir weiterhelfen? Vielen Dank im voraus.
Gruß
Torsten
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA: AddShape
18.08.2009 14:28:47
Rudi
Hallo,
so:
Sub tt()
Dim shp As Shape
With ActiveSheet
Set shp = .Shapes.AddShape(msoShapeOval, 273#, 764.25, 80.25, 38.25)
End With
With shp
.Fill.Visible = msoFalse
.Fill.Solid
.Fill.Transparency = 0#
.Line.Weight = 2.25
.Line.DashStyle = msoLineSolid
.Line.Style = msoLineSingle
.Line.Transparency = 0#
.Line.Visible = msoTrue
.Line.ForeColor.SchemeColor = 10
.Line.BackColor.RGB = RGB(255, 255, 255)
End With
End Sub

Gruß
Rudi
Anzeige
AW: VBA: AddShape
18.08.2009 14:36:26
Torsten
Hallo Rudi,
vielen Dank für Deine Rückmeldung. Klappt wunderbar.
Darf ich noch eine kleine Ergänzung erfragen?
Wie müßte Code im oberen Teil angepaßt werden. sodaß die Markierung über die Zelle gesetzt wird, die gerade markiert ist?
Gruß
Torsten
AW: VBA: AddShape
18.08.2009 15:24:34
Rudi
Hallo,
Sub tt()
Dim shp As Shape
Dim l As Single, t As Single, w As Single, h As Single, ws As Single, hs As Single
With ActiveCell
l = .Left
t = .Top
h = .Height
w = .Width
End With
ws = 80.25
hs = 38.25
With ActiveSheet
Set shp = .Shapes.AddShape(msoShapeOval, l + w / 2 - ws / 2, t + h / 2 - hs / 2, ws, hs)
End With
With shp
.Fill.Visible = msoFalse
.Fill.Solid
.Fill.Transparency = 1#
.Line.Weight = 2.25
.Line.DashStyle = msoLineSolid
.Line.Style = msoLineSingle
.Line.Transparency = 0#
.Line.Visible = msoTrue
.Line.ForeColor.SchemeColor = 10
.Line.BackColor.RGB = RGB(255, 255, 255)
End With
End Sub

Gruß
Rudi
Anzeige
erledigt - mT
18.08.2009 15:29:52
Torsten
Hallo Rudi,
perfekt - das hätte ich mit meinen bescheidenen Kenntnissen nie hinbekommen.
Hab' vielen Dank für Deine Hilfe.
Gruß
Torsten
;
Anzeige

Infobox / Tutorial

Shapes in Excel mit VBA hinzufügen


Schritt-für-Schritt-Anleitung

Um ein Shape in Excel mit VBA hinzuzufügen, kannst du den folgenden Code verwenden. Dieser Code platziert ein Oval auf dem Arbeitsblatt:

Sub AddShapeExample()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeOval, 273, 764.25, 80.25, 38.25)
    With shp
        .Fill.Visible = msoFalse
        .Fill.Solid
        .Fill.Transparency = 0
        .Line.Weight = 2.25
        .Line.DashStyle = msoLineSolid
        .Line.Style = msoLineSingle
        .Line.Transparency = 0
        .Line.Visible = msoTrue
        .Line.ForeColor.SchemeColor = 10
        .Line.BackColor.RGB = RGB(255, 255, 255)
    End With
End Sub

Dieser Code verwendet die Methode ActiveSheet.Shapes.AddShape, um ein Oval (msoShapeOval) hinzuzufügen. Achte darauf, dass du die Parameter für Position und Größe entsprechend anpasst.


Häufige Fehler und Lösungen

Ein häufiger Fehler, der beim Hinzufügen von Shapes mit VBA auftritt, ist der "Anwendungs- oder objektorientierte Fehler". Dies geschieht oft, wenn die Syntax nicht korrekt ist oder die Parameter ungültig sind.

Lösung: Stelle sicher, dass du die Shapes korrekt referenzierst und alle benötigten Parameter angibst. Hier ist die korrigierte Version des Codes:

Sub CorrectedAddShape()
    Dim shp As Shape
    With ActiveSheet
        Set shp = .Shapes.AddShape(msoShapeOval, 273, 764.25, 80.25, 38.25)
    End With
    ' Rest des Codes bleibt gleich
End Sub

Wenn du die With-Anweisung korrekt verwendest, kannst du Fehler vermeiden.


Alternative Methoden

Es gibt verschiedene Möglichkeiten, Shapes in Excel mit VBA zu erstellen. Eine Möglichkeit ist, die AddShape-Methode direkt in einer Funktion zu verwenden, um die Flexibilität zu erhöhen. Hier ist ein Beispiel:

Sub AddCustomShape(shapeType As Integer, leftPos As Single, topPos As Single)
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes.AddShape(shapeType, leftPos, topPos, 80, 40)
    ' Weitere Anpassungen hier
End Sub

Du kannst diese Funktion aufrufen und verschiedene Shapes hinzufügen, indem du den shapeType-Parameter anpasst.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Shapes mit VBA hinzufügen kannst:

  1. Oval über der aktiven Zelle:
Sub AddShapeAboveActiveCell()
    Dim shp As Shape
    Dim l As Single, t As Single, w As Single, h As Single
    With ActiveCell
        l = .Left
        t = .Top
        w = .Width
        h = .Height
    End With
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeOval, l, t - h, w, h)
End Sub
  1. Rechteck hinzufügen:
Sub AddRectangle()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 150, 100)
    With shp
        .Fill.ForeColor.RGB = RGB(255, 0, 0) ' Rot
    End With
End Sub

Tipps für Profis

  • Verwende Konstanten: Nutze Konstanten wie msoShapeOval oder msoShapeRectangle, um deinen Code lesbarer zu machen.
  • Anpassungen: Experimentiere mit den Eigenschaften von Shapes, wie Fill, Line, und Shadow, um visuell ansprechende Grafiken zu erstellen.
  • Fehlerbehandlung: Implementiere eine einfache Fehlerbehandlung in deinem VBA-Code, um unerwartete Fehler zu erfassen und zu beheben.

FAQ: Häufige Fragen

1. Wie kann ich die Größe eines Shapes ändern?
Du kannst die Größe eines Shapes ändern, indem du die Width und Height-Eigenschaften anpasst. Beispiel:

shp.Width = 100
shp.Height = 50

2. Kann ich Shapes in einer Schleife hinzufügen?
Ja, du kannst eine Schleife verwenden, um mehrere Shapes hinzuzufügen. Hier ein Beispiel:

For i = 1 To 5
    ActiveSheet.Shapes.AddShape(msoShapeOval, 10 * i, 10, 80, 38)
Next i

Mit diesen Informationen bist du gut gerüstet, um Shapes erfolgreich in Excel mit VBA hinzuzufügen und zu bearbeiten!

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige