# Wie per VBA-Makro eine Zeichenform an der Mausposition einfügen?



## popi (20. Oktober 2016)

Hallo,
leider komme ich da als relativer Anfänger alleine nicht recht weiter.
Ich baue für Powerpoint Makros zum Einfügen von vordefinierten Zeichenformen (bunte Rechtecke etc.).
Das Starten der Makros klappt schon über die Menüzeile, allerdings bislang nur an einer festen Position auf der Folie. 
Wie kriege ich es aber nur hin, dass die Form dann dorthin eingefügt wird, wo ich nach dem Starten des Makros mit der Maus hinklicke. Hat jemand dazu einen Tipp? Vielen Dank schon mal!


----------



## popi (21. Oktober 2016)

Nun bin ich schon ein kleines Stückchen weiter, ich kann die Mausposition beim Klicken auffangen und in die Definition des Ortes, wo das Rechteck einzusetzen ist, auch einbauen.
NUR: es ist leider sozusagen "ein Mausklick zu früh", es sind die Werte, die sich schon beim Klicken des Startbuttons für das Makro ergeben. Ich möchte aber die Werte des nächsten Mausklicks haben, wenn ich an die gewünschte Position im Feld klicke. Wie mache ich das denn?

Hier mein bisheriges Makro (für 64bit, bei 32 das " PtrSafe" in der ersten Zeile entfernen)

Private Declare PtrSafe Function GetCursorPos Lib "user32" (cPoint As POINTAPI) As Long
Private Type POINTAPI
    X As Long
    Y As Long
End Type

Sub RechteckAnMauspositionEinfügen()
Dim tPoint As POINTAPI
X = GetCursorPos(tPoint)
    ActiveWindow.Selection.SlideRange.Shapes.AddShape(msoShapeRectangle, (tPoint.X), (tPoint.Y), 141, 101.25).Select
    ActiveWindow.Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = (tPoint.X) & Chr(13) & (tPoint.Y)
End Sub


----------



## HonniCilest (21. Oktober 2016)

Ich hätte nur grobe Lösungs-Ansätze, allerdings bin ich mir nicht sicher, inwiefern diese umsetzbar sind.

a) Könntest du auf das Auslösen des Makros per Maus verzichten und anstatt das Makro per Tastenkombination auslösen?
b) Éventuell gibt es eine Art onClick? Event für PowerPoint Sheets. In dieser würdest du in Abhängigkeit einer globalen Variable das Einfügen durchführen. Nach dem Einfügen setzt du die Variable auf false und beim Ausführen des Makros setzt du sie auf true.


----------



## popi (24. Oktober 2016)

Hallo HonniCilest,
vielen Dank für Deine Gedanken dazu!
Die Variante mit den Shortcuts wäre, sofern machbar, leider etwas sperrig, da ich mir ca. 20-30 solcher Einbaumodule basteln möchte.
Der Gedanke mit dem onClick-Event klingt vielversprechend, ich habe dazu jetzt ein paar Tage gegoogelt, aber nicht recht was gefunden - bzw. nichts, was ich verstanden hätte :-(  
Immerhin kam ich dadurch auf die Spur, Makro-Auslösung und Cursorpositionabfrage mit dem sleep-Befehl zeitlich um eine Sekunde zu versetzen, ist aber auch nicht ganz das Gelbe vom Ei. Und ich merke, dass die Cursorposition bei der Abfrage sich auf den Bildschirm oben links bezieht, und beim Einfügen des Zeichnungselementes aber auf die obere linke Dokumentkante, was also noch irgendwie umgerechnet werden müsste.
Hat noch jemand eine Idee zur Fragestellung?


----------



## HonniCilest (24. Oktober 2016)

Und was ist, wenn du dein Modul in die Zwischenablage kopierst und statt Klick die Einfügen Funktion verwendest?


----------

