views:

558

answers:

1

Hello everybody.

There is one thing I want to do in PowerPoint VBA.

I want to create two dots in the main window - dot A and dot B - by their given coordinates: for example, A (232, 464) and B (109, 567). I don't know how to do it in PowerPoint VBA. I know how to create a simple straight line. I use this macro code for that:

Sub CreateLine()
    ActiveWindow.Selection.SlideRange.Shapes.AddLine(192#, 180#, 360#, 252#).Select
End Sub

But I still don't know how what code I would need to create just dots, not lines.

Then, I want to move those dots somehow. Again, I know hot to move whole lines or other objects - for that I use this code:

Sub move()
    ActiveWindow.Selection.ShapeRange.IncrementLeft 6#
End Sub

But I don't know how to move dots, especially if I want to move one dot one way (for example, move it up) and the other dot another way (for example, move it to the left).

Why do I want to do it? Because later I am planning to keep those dots "connected" by straight lines, no matter which directions I move those dots.

If you know the answer, please share it with me here.

Thank you in advance.

+3  A: 

in order to create a "dot" you use the "oval" shape, i.e. a small circle, where you can set line and fill colors to the same, i.e.

Sub DoDot()

    'create a circular shape    
    ActiveWindow.Selection.SlideRange.Shapes.AddShape(msoShapeOval, 144.5, 150.88, 11.38, 11.38).Select

    With ActiveWindow.Selection.ShapeRange

        ' color it
        .Line.ForeColor.SchemeColor = ppAccent1
        .Line.Visible = msoTrue
        .Fill.ForeColor.SchemeColor = ppAccent1
        .Fill.Visible = msoTrue
        .Fill.Solid

        ' move it
        .Top = 10
        .Left = 10

    End With
End Sub

I used the SchemeColor property here to color the shape, you can of course use an explicit RGB color as well.

Later on, if you want to connect dots with lines, you will need to either move the dots and (re)create lines in between them, or you use dot-shaped line end types

Sub LineWithEndType()
    ActiveWindow.Selection.SlideRange.Shapes.AddLine(195.62, 162.25, 439.38, 309.75).Select
    With ActiveWindow.Selection.ShapeRange
        .Line.Visible = msoTrue
        .Fill.Transparency = 0#
        .Line.BeginArrowheadStyle = msoArrowheadOval
        .Line.EndArrowheadStyle = msoArrowheadOval
        .Line.BeginArrowheadLength = msoArrowheadLong
        .Line.BeginArrowheadWidth = msoArrowheadWide
        .Line.EndArrowheadLength = msoArrowheadLong
        .Line.EndArrowheadWidth = msoArrowheadWide
    End With

End Sub

Hope that helps Good luck MikeD

MikeD
WOW!!!! Mike, thank you soooooo much!!!! Too bad, I can't vote now as my reputation is not 15 points yet. (Is there any other way I can mark your answer as full and correct?)I promise I will vote in favor of your present answer as soon as I get 15 points of my reputation.Thanks again.
brilliant
it's OK - you have accepted the solution, that's enough reward for me. I'm not aiming at breaking the world record, just sharing what I can share easily. BTW ... make frequent use of the "Record Macro" function in any Office programm, it will give you insights into some properties and methods quickly.
MikeD