在 VBA Word 2010 中按名称删除命令按钮
Deleting CommandButtons by name in VBA Word 2010
在word模板中,我有两个命令按钮,即
[添加部分] 名为 "CommandButton1"
[完成] - 名为 "CommandButton2"
我需要在单击 [完成] 时删除两个按钮
到目前为止,这是我的代码
Private Sub CommandButton2_Click()
Dim i As Integer
For i = ThisDocument.InlineShapes.Count To 1 Step -1
With ThisDocument.InlineShapes(i)
If .OLEFormat.Object.Name = "CommandButton1" Then
.Delete
End If
End With
Next
End Sub
该代码是我在网上找到的片段的组合。我只添加了 "CommandButton1" 用于测试目的,并计划添加对 CommandButton2 的检查(如果可行的话)。
在执行代码时,它成功删除了 CommandButton2,并在不删除 CommandButton1 的情况下给我一个错误“无法在水平线上访问对象”。
我试着弄乱 "count to 1 Step -1" 部分(我不知道他们暗示什么),但结果都是一样的。
for ... next
循环从数组末尾 (ThisDocument.InlineShapes.Count) 到数组开头,以确保遍历所有需要删除的项目。
例如,如果您的数组有 3 个项目,从第一项到最后一项:
- 对象(1)
- 对象(2)
- 对象(3)
通过删除第一项,数组将重新排序,Object(2) 将获得索引 1,Object(3) 将获得索引 2。使用 for ... next
可能会导致问题因为数组中的项目总数与开始循环时不同。
在这种情况下,我宁愿使用 do while ... loop
:
Private Sub CommandButton2_Click()
On Error Resume Next
Err.Clear
Dim i As Integer
i = ThisDocument.InlineShapes.Count
Do While (i > 0)
If ThisDocument.InlineShapes(i).OLEFormat.ClassType = "Forms.CommandButton.1" Then
If ThisDocument.InlineShapes(i).OLEFormat.Object.Name = "CommandButton1" _
Or ThisDocument.InlineShapes(i).OLEFormat.Object.Name = "CommandButton2" Then
If Err.Number = 0 Then
ThisDocument.InlineShapes(i).Delete
End If
Err.Clear
End If
End If
i = i - 1
Loop
End Sub
在word模板中,我有两个命令按钮,即
[添加部分] 名为 "CommandButton1"
[完成] - 名为 "CommandButton2"
我需要在单击 [完成] 时删除两个按钮
到目前为止,这是我的代码
Private Sub CommandButton2_Click()
Dim i As Integer
For i = ThisDocument.InlineShapes.Count To 1 Step -1
With ThisDocument.InlineShapes(i)
If .OLEFormat.Object.Name = "CommandButton1" Then
.Delete
End If
End With
Next
End Sub
该代码是我在网上找到的片段的组合。我只添加了 "CommandButton1" 用于测试目的,并计划添加对 CommandButton2 的检查(如果可行的话)。
在执行代码时,它成功删除了 CommandButton2,并在不删除 CommandButton1 的情况下给我一个错误“无法在水平线上访问对象”。
我试着弄乱 "count to 1 Step -1" 部分(我不知道他们暗示什么),但结果都是一样的。
for ... next
循环从数组末尾 (ThisDocument.InlineShapes.Count) 到数组开头,以确保遍历所有需要删除的项目。
例如,如果您的数组有 3 个项目,从第一项到最后一项:
- 对象(1)
- 对象(2)
- 对象(3)
通过删除第一项,数组将重新排序,Object(2) 将获得索引 1,Object(3) 将获得索引 2。使用 for ... next
可能会导致问题因为数组中的项目总数与开始循环时不同。
在这种情况下,我宁愿使用 do while ... loop
:
Private Sub CommandButton2_Click()
On Error Resume Next
Err.Clear
Dim i As Integer
i = ThisDocument.InlineShapes.Count
Do While (i > 0)
If ThisDocument.InlineShapes(i).OLEFormat.ClassType = "Forms.CommandButton.1" Then
If ThisDocument.InlineShapes(i).OLEFormat.Object.Name = "CommandButton1" _
Or ThisDocument.InlineShapes(i).OLEFormat.Object.Name = "CommandButton2" Then
If Err.Number = 0 Then
ThisDocument.InlineShapes(i).Delete
End If
Err.Clear
End If
End If
i = i - 1
Loop
End Sub