Word 2013 - .docx文件中的宏引用

时间:2015-12-09 09:34:43

标签: vba ms-word word-vba

我有一个非常大的模板(就宏而言)并且我创建了一个新模块,当用户在键盘上执行指定的快捷方式时会调用该模块。 宏不做什么,只需调用" ThisDocument.HideComboBoxes"。

" HideComboBoxes"是ThisDocument中的Sub,它显而易见:隐藏文档中的所有组合框。

只要我使用模板,代码就可以正常工作。

如果我从中提取一个新文档(docx文件),则该快捷方式不再起作用(这很明显,因为此文档的ThisDocument现在为空)。

如何从文档中访问模板的ThisDocument,或者如何从docx中隐藏组合框?

这里是将组合框隐藏在模板中的代码。本文档:

Sub HideComboBoxes()
 Me.ComboBoxConfi.Width = 1
 Me.ComboBoxConfi.Height = 1
 Me.ComboBoxState.Width = 1
 Me.ComboBoxState.Height = 1
End Sub

提前致谢

1 个答案:

答案 0 :(得分:1)

您需要将代码放入" normal"模块。这将需要更改对ActiveX控件的调用,这很痛苦,但有效。

假设ActiveX控件在文档表面上作为InlineShapes进行管理,调用将如下所示:

Dim cbConfi as Object 'or as MsForms.ComboBox to get Intellisense
Set cbConfi = ActiveDocument.InlineShapes([indexvalue]).OLEFormat.Object
cbConfi.Width = 1

如果您不想依赖索引值(InlineShapes集合中控件的位置),则可以选择ActiveX控件并为其指定书签。或者你可以循环ActiveX控件的集合,检查类型,如果它是一个OLE对象,检查类类型是否为MSForms.Combobox,然后通过OLEFormat.Object.Name检查它是否是正确的。