删除形状宏需要 运行 两次才能工作
Delete Shape Macro needs to be run twice to work
我有这个 PPT vba 脚本可以删除每张幻灯片左下角区域中的所有形状。它有效,但有时会在该区域留下一个形状。如果我再次 运行 它会摆脱它,但我不想 运行 它两次!我该如何解决这个问题?
Sub GoAwayDumbText()
Dim oPres As Presentation
Dim oSlides As Slides
Dim oSld As Slide
Dim oShp As Shape
Dim PathSep As String
Dim sTempString As String
#If Mac Then
PathSep = ":"
#Else
PathSep = "\"
#End If
Set oPres = ActivePresentation
Set oSlides = oPres.Slides
For Each oSld In oSlides
For Each oShp In oSld.Shapes
If oShp.Left <= 135 And oShp.Top >= 260 Then
oShp.Delete
Else
End If
Next oShp
Next oSld
End Sub
当您遍历 collection(形状、幻灯片等)并沿途删除项目时,For/Each 循环不会按预期运行。
相反,使用(在这种情况下)
对于 x = oSld.Shapes.Count 到 1 步 -1
删除从collection结尾到开头而不是从开头到结尾。
为什么?
假设您在 collection 中有三个项目:
VBA 以其内部 For/Each 计数器设置为 1 开始
第一项符合您的条件,您将其删除
VBA 将其内部 For/Each 计数器递增到 2
由于您删除了一项,因此 collection 中只剩下两项,因此 VBA 查看第二项(曾经是第三项)并将其删除。
VBA 将其内部计数器增加到 3,但是您删除了三个原始项目中的前两个,因此 collection 中只有 1 个项目;没有第 3 项,所以以前的第 3 项从来没有人看过。
[如果有人可以对此提供 better/clearer 解释,请接受。]
我有这个 PPT vba 脚本可以删除每张幻灯片左下角区域中的所有形状。它有效,但有时会在该区域留下一个形状。如果我再次 运行 它会摆脱它,但我不想 运行 它两次!我该如何解决这个问题?
Sub GoAwayDumbText()
Dim oPres As Presentation
Dim oSlides As Slides
Dim oSld As Slide
Dim oShp As Shape
Dim PathSep As String
Dim sTempString As String
#If Mac Then
PathSep = ":"
#Else
PathSep = "\"
#End If
Set oPres = ActivePresentation
Set oSlides = oPres.Slides
For Each oSld In oSlides
For Each oShp In oSld.Shapes
If oShp.Left <= 135 And oShp.Top >= 260 Then
oShp.Delete
Else
End If
Next oShp
Next oSld
End Sub
当您遍历 collection(形状、幻灯片等)并沿途删除项目时,For/Each 循环不会按预期运行。
相反,使用(在这种情况下)
对于 x = oSld.Shapes.Count 到 1 步 -1
删除从collection结尾到开头而不是从开头到结尾。
为什么?
假设您在 collection 中有三个项目:
VBA 以其内部 For/Each 计数器设置为 1 开始 第一项符合您的条件,您将其删除 VBA 将其内部 For/Each 计数器递增到 2 由于您删除了一项,因此 collection 中只剩下两项,因此 VBA 查看第二项(曾经是第三项)并将其删除。 VBA 将其内部计数器增加到 3,但是您删除了三个原始项目中的前两个,因此 collection 中只有 1 个项目;没有第 3 项,所以以前的第 3 项从来没有人看过。
[如果有人可以对此提供 better/clearer 解释,请接受。]