Dan Laine
Dan Laine

Reputation: 3

MS Word Macro VBA Help, Selected image

I have basic Macro and VBA knowledge yet cannot get my head around where I am going wrong here. (Code inserted at the bottom) I want my macro to move a selected image into the top centre of the page. The issue I am facing is that it will not work for each image in the document, it works for the first one then no longer performs the task. I am using Microsoft Word 2016.

The main command does what I want it to, I feel my error is within these two lines

Set myDocument = ActiveDocument
With myDocument.Shapes(1)

Whole code;

Sub AlignToCentre()
'
' AlignToCentre

    Dim shp As Shape
Set myDocument = ActiveDocument
With myDocument.Shapes(1)
        .WrapFormat.Type = wdWrapSquare
        .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
        .Left = wdShapeCenter
        .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        .Top = InchesToPoints(1)

    End With
End Sub

Upvotes: 0

Views: 1850

Answers (2)

vlad.lisnyi
vlad.lisnyi

Reputation: 345

Exactly like Kim Raaness has suggested, you need to loop through all shapes of you would like to centre them all.

Try something like this:

Sub AlignToCentre()
'
' AlignToCentre

    Dim shp As Shape
Set myDocument = ActiveDocument
For Each shp in myDocument.Shapes
  With shp
        .WrapFormat.Type = wdWrapSquare
        .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
        .Left = wdShapeCenter
        .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        .Top = InchesToPoints(1)
  End With
Next shp
End Sub

Upvotes: 1

Cindy Meister
Cindy Meister

Reputation: 25693

If you want this to work with the selected image, and only the selected image, then more like this, where you get the Shape from the current selection.

Note how you should first check to make sure a Shape is selected...

Sub PositionSelectedShape()
    Dim sel As word.Selection
    Dim shp As word.Shape

    Set sel = Selection
    If sel.Type = wdSelectionShape Then
        Set shp = sel.ShapeRange(1)
        With shp
            .WrapFormat.Type = wdWrapSquare
            .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
            .Left = wdShapeCenter
            .RelativeVerticalPosition = wdRelativeVerticalPositionPage
            .Top = InchesToPoints(1)
        End With
    End If
End Sub

Upvotes: 2

Related Questions