MS Word宏VBA帮助,选定图像

MS Word宏VBA帮助,选定图像,vba,ms-word,Vba,Ms Word,我有基本的宏和VBA知识,但我无法了解我在这里哪里出错。(底部插入代码)我希望我的宏将选定的图像移动到页面的顶部中心。我面临的问题是,它不会适用于文档中的每个图像,它适用于第一个图像,然后不再执行任务。我正在使用Microsoft Word 2016 主命令执行我想要的操作,我觉得我的错误在这两行之内 Set myDocument = ActiveDocument With myDocument.Shapes(1) 整个代码 Sub AlignToCentre() ' ' AlignToCe

我有基本的宏和VBA知识,但我无法了解我在这里哪里出错。(底部插入代码)我希望我的宏将选定的图像移动到页面的顶部中心。我面临的问题是,它不会适用于文档中的每个图像,它适用于第一个图像,然后不再执行任务。我正在使用Microsoft Word 2016

主命令执行我想要的操作,我觉得我的错误在这两行之内

Set myDocument = ActiveDocument
With myDocument.Shapes(1)

整个代码

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

如果希望此操作仅用于选定图像,则更类似于此,从当前选择中获取形状

请注意,您应该首先检查以确保已选择形状

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

如果希望此操作仅用于选定图像,则更类似于此,从当前选择中获取形状

请注意,您应该首先检查以确保已选择形状

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
正如所建议的,你需要在所有的形状中循环,你想把它们都放在中间

试着这样做:

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
正如所建议的,你需要在所有的形状中循环,你想把它们都放在中间

试着这样做:

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
形状(1)将始终返回相同的形状。您应该将索引作为参数传递给子对象,并执行myDocument.Shapes(索引)myDocument.Shapes(1)将始终返回相同的形状。您应该将索引作为参数传递给子对象,并执行myDocument.Shapes(索引)