【问题标题】:VBA: Code not running after ToggleFormsDesignVBA:代码在 ToggleFormsDesign 之后未运行
【发布时间】:2016-06-23 23:48:37
【问题描述】:

我在 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

但是当我运行这段代码时,什么都没有发生......

【问题讨论】:

  • 你在这里有两次ActiveDocument.ToggleFormsDesign...代码是在第一个之后停止,跳过ThisDocument.cmdFormPreencher.Select.Delete,还是在第二个之后停止,跳过UserForm2.Show
  • @Mat'sMug 在第一个之后

标签: vba ms-word


【解决方案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 不会“一时兴起”更改该名称。

  1. 激活设计模式。
  2. 点击控件将其选中
  3. 转到 VB 编辑器窗口
  4. Ctrl+G 将焦点放在“即时窗口”中
  5. 键入以下内容(替换您想要的名称),然后按 Enter 执行:

    Selection.ShapeRange(1).Name = "要分配的名称"

  6. 在上面的代码中使用这个Name

【讨论】:

  • 是的,它是一个 ActiveX 按钮。找出 InlineShape 数量的部分现在是问题......我在另一篇文章中读到 InlineShapes 列在选择面板中,但即使我访问它,ActiveX 按钮也没有显示在那里......有没有另一种方法发现了吗?
  • 我尝试将 inlineShape 分配为数字 1:设置 inlineShape = ActiveDocument.InlineShapes(1) 但我收到错误 5941“请求的集合成员不存在”
  • 您确定它是 InlineShape 而不是 Shape 吗?从图形上看,它是使用文本换行还是内联格式?它不在页眉、页脚或其他任何内容中?
  • In Wrap Text 设置为 In Front Of Text
  • 不,它不在页眉或页脚中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 2023-03-10
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多