Powerpoint vba:将形状对象属性应用于选择
Powerpoint vba: Apply shape object properties to selection
我想要运行一个允许执行以下步骤的宏:
- 用户点击形状 A 和 运行s 宏
宏会记录形状A的位置和大小属性
用户在另一张幻灯片上单击形状 B
- 宏将形状 A 的位置和大小属性应用到形状 B
- 用户在另一张幻灯片上点击形状 C
- 宏将形状 A 的位置和大小属性应用到形状 C
等...
到目前为止,我已经能够获得初始形状(形状 A)的属性,但不确定如何让用户 select 获得下一个形状。
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()" 开头的代码插入同一模块中。转到插入 > 用户窗体,然后将两个命令按钮拖到 UI 框上,然后应该会出现另一个 "Userform code" window。新 window 是 "Private Sub CommandButton1_Click()" 代码应该去的地方。
我想您在为此使用点击事件时会遇到麻烦。我建议创建宏并将它们存储在快速访问工具栏上。在那里,键盘快捷键是 ALT+SOME NUMBER,可以快速使用。
对于代码,一般的想法是创建具有 global
范围的变量。这允许它们在 Sub
完成执行后保留它们的值。
在下面的代码中,StoreDetails
将保存,OutputDetails
将应用于新选择的对象。保存的信息将保留在那里,这样您就可以从 A 保存然后申请 B、C、D,而无需再次看到 A。
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 的文章,如果你需要帮助。
一种方法如下:
在模块中:
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
您需要添加错误检查以确保当用户单击任何按钮时选择了某些内容,并且他们在选择第一个形状后至少向数组添加了一个形状,并且您可能也想处理多个选定的形状。
我想要运行一个允许执行以下步骤的宏:
- 用户点击形状 A 和 运行s 宏
宏会记录形状A的位置和大小属性
用户在另一张幻灯片上单击形状 B
- 宏将形状 A 的位置和大小属性应用到形状 B
- 用户在另一张幻灯片上点击形状 C
- 宏将形状 A 的位置和大小属性应用到形状 C 等...
到目前为止,我已经能够获得初始形状(形状 A)的属性,但不确定如何让用户 select 获得下一个形状。
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()" 开头的代码插入同一模块中。转到插入 > 用户窗体,然后将两个命令按钮拖到 UI 框上,然后应该会出现另一个 "Userform code" window。新 window 是 "Private Sub CommandButton1_Click()" 代码应该去的地方。
我想您在为此使用点击事件时会遇到麻烦。我建议创建宏并将它们存储在快速访问工具栏上。在那里,键盘快捷键是 ALT+SOME NUMBER,可以快速使用。
对于代码,一般的想法是创建具有 global
范围的变量。这允许它们在 Sub
完成执行后保留它们的值。
在下面的代码中,StoreDetails
将保存,OutputDetails
将应用于新选择的对象。保存的信息将保留在那里,这样您就可以从 A 保存然后申请 B、C、D,而无需再次看到 A。
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 的文章,如果你需要帮助。
一种方法如下:
在模块中:
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
您需要添加错误检查以确保当用户单击任何按钮时选择了某些内容,并且他们在选择第一个形状后至少向数组添加了一个形状,并且您可能也想处理多个选定的形状。