Powerpoint vba:将形状对象属性应用于选择

时间:2015-05-15 16:52:16

标签: vba powerpoint powerpoint-vba

我想运行一个允许执行以下步骤的宏:

  1. 用户点击形状A并运行宏
  2. 宏将记录形状A的位置和大小属性

  3. 用户点击另一张幻灯片上的形状B

  4. 宏将形状A的位置和大小属性应用于形状B
  5. 用户点击另一张幻灯片上的形状C
  6. 宏将形状A的位置和大小属性应用于形状C. 等...
  7. 到目前为止,我已经能够获得初始形状(形状A' s)属性,但我不确定如何让用户选择下一个形状。

    Dim w As Double
    Dim h As Double
    Dim l As Double
    Dim t As Double
    
    With ActiveWindow.Selection.ShapeRange(1)
        w = .Width
        h = .Height
        l = .Left
        t = .Top
    End With
    

    感谢帮助!

    请参阅下面的答案。如果您之前没有使用过表单(比如我自己),则代码以" Private Sub CommandButton1_Click()"开头。不应插入同一模块中。转到插入> Userform,然后将两个命令按钮拖到UI框上,另一个" Userform代码"窗口应该出现。那个新窗口就是" Private Sub CommandButton1_Click()"代码应该去。

2 个答案:

答案 0 :(得分:1)

一种方法是:

在一个模块中:

Public aShapes() As Shape

Sub RecordShapes()

    ReDim aShapes(1 To 1)
    Dim x As Long

    Set aShapes(1) = ActiveWindow.Selection.ShapeRange(1)

    ' the modeless form will allow the user to move from slide to slide
    ' selecting shapes as they wish
    UserForm1.Show vbModeless

End Sub

在表格上,两个按钮;一个用于将当前选定的形状添加到您正在收集的形状数组中,另一个用于将第一个形状的参数应用于添加的所选形状。

Private Sub CommandButton1_Click()

    ReDim Preserve aShapes(1 To UBound(aShapes) + 1)
    Set aShapes(UBound(aShapes)) = ActiveWindow.Selection.ShapeRange(1)

End Sub
Private Sub CommandButton2_Click()

    Dim x As Long
    For x = 2 To UBound(aShapes)
        aShapes(x).Left = aShapes(1).Left
        aShapes(x).Width = aShapes(1).Width
        ' etc
    Next

End Sub

您需要添加错误检查以确保在用户点击任何按钮时选择了SOMETHING,在选择第一个形状后,他们已将至少一个形状添加到数组中,并且您可能还想处理多个选定的形状。

答案 1 :(得分:0)

我认为您将无法使用点击事件。我建议创建宏并将它们存储在快速访问工具栏上。在那里,键盘快捷键是ALT + SOME NUMBER,可以快速使用。

对于代码,一般的想法是您使用global范围创建变量。这允许他们在Sub完成执行后保留其值。

在下面的代码中,StoreDetails将保存,OutputDetails将应用于新选择的对象。保存的信息将保留在那里,这样您就可以从A保存,然后在不再看到A的情况下应用于B,C,D。

Module1内的代码

Dim w As Double
Dim h As Double
Dim l As Double
Dim t As Double

Sub StoreDetails()
    With ActiveWindow.Selection.ShapeRange(1)
        w = .Width
        h = .Height
        l = .Left
        t = .Top
    End With
End Sub

Sub OutputDetails()
    With ActiveWindow.Selection.ShapeRange(1)
        .Width = w
        .Height = h
        .Left = l
        .Top = t
    End With
End Sub

如果您需要帮助,请参阅以下assigning macros to the Quick Access Toolbar文章。