我在VBA(MS Word)中有以下代码,这是在我点击一个名为 cmdFormPreencher 的按钮后插入我的文档中运行的:
Private Sub cmdFormPreencher_Click()
'
If ActiveDocument.FormsDesign = False Then
ActiveDocument.ToggleFormsDesign
End If
'
ThisDocument.cmdFormPreencher.Select
ThisDocument.cmdFormPreencher.Delete
ActiveDocument.ToggleFormsDesign
'
UserForm2.Show
End Sub
上面代码的目的是删除插入到我的文档中的按钮。
但是当我运行代码时,只选择了按钮。当我试图通过调试弄清楚发生了什么时,它向我展示了代码运行到ActiveDocument.ToggleFormsDesign
并且没有运行剩余的代码
这是VBA的错误,还是我做错了什么?如果是这样,我该如何解决这个问题?
谢谢!
注意:ActiveX按钮不在页眉和页脚中。文本换行设置为在文本前面
修改
当我尝试运行一个宏,激活FormDesign,选择ActiveX按钮然后删除时,我得到这个代码:
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveDocument.ToggleFormsDesign
ActiveDocument.Shapes("Control 52").Select
Selection.ShapeRange.Delete
ActiveDocument.ToggleFormsDesign
End Sub
但是当我运行此代码时没有任何反应......
答案 0 :(得分:1)
这是设计的。当Office应用程序处于设计模式时,代码不应在作为文档一部分的ActiveX对象上运行。
我认为这是一个ActiveX按钮,在这种情况下,它是InlineShapes或Shapes集合的一个成员 - Word像图形对象一样处理它。删除图形表示就足够了,您可以通过将其更改为显示为图标而不是按钮来实现。
例如,对于InlineShape:
Sub DeleteActiveX()
Dim ils As word.InlineShape
Set ils = ActiveDocument.InlineShapes(1)
ils.OLEFormat.DisplayAsIcon = True
ils.Delete
End Sub
您只需要弄清楚如何识别InlineShape或Shape。你可以为InlineShape添加书签;一个Shape有一个Name属性。
编辑:由于根据评论中提供的后续信息,您有一个Shape对象,而不是InlineShape,以下方法应该有效:
Dim shp As word.Shape
Set shp = ActiveDocument.Shapes("Shape Name") 'Index value can also be used
shp.Delete
请注意,Word会自动为Shape.Name
属性分配内容,但在ActiveX控件的情况下,这些名称可能会因 无理由而更改。因此,如果您使用其名称而不是索引值来识别控件,那么自己分配一个名称要好得多,哪个Word不会“突发奇想”改变。
键入以下内容(替换您想要的名称),然后按Enter键执行:
Selection.ShapeRange(1).Name =“要分配的名称”
在上面的代码中使用此Name