更新3:
当我保存vb6时会发生这种情况 脚本,关闭单词,开始单词,然后 像往常一样运行模板 运行模板,即strTemplate 变成Normal.doc。然后我一个人 回到原来的模板 没有通过vsto保存,那 回到了。中的Letter.doc 变量strTemplate ...
更新2:
在我的启动脚本中,我有一行如下:
strTemplate = ActiveDocument.AttachedTemplate
在名为Letter.dot的原始模板中,strTemplate = Letter.dot。
但由于某种原因,在基于原始Letter.dot模板的新vsto模板中,上面的同一行变为Normal.dot,这导致了问题,即使新模板仍然被命名为Letter.dot。
我尝试手动编码
strAttTemplate = "Letter.dot"
并且脚本进入下一阶段,但随后开始抱怨其他内容。
所以我的问题是,原始模板有strTemplate = Letter.dot,但为什么在通过vsto运行模板后,这会改为strTemplate = Normal.dot?
更新1:
在对两个版本的模板(即原始非vsto模板)和新的vsto模板进行调试之后,我发现原始文件没有任何文档属性,但vsto模板有2个文档属性。但这似乎不是问题。
似乎问题与vsto模板有关联,并且附加了normal.dot,而原始的非vsto模板没有附加normal.dot。
是否可以从新模板中删除附加的normal.dot?
原始问题:
我正在使用Visual Studio 2008来创建Word 2003模板项目。我选择了“使用现有模板”选项,该选项在后台已经有一些vb6宏脚本。出于某种原因,当我保存Visual Studio项目时,vb6脚本停止工作。
当模板在word中打开时,旧的vb6脚本会立即运行,但是当我在vs2008中使用模板而不添加额外的功能并保存项目并构建项目时,当我尝试在word中打开模板时,旧的启动脚本不起作用。
为什么会这样?
答案 0 :(得分:2)
可能的情况是您在Word 2003 .dot VBA中有一个名为AutoExec
的例程。当部署为VSTO模板时,这不会执行,因为它不是Word为了运行AutoExec
所期望的加载项类型(它需要STARTUP文件夹中的.wll文件或.dot文件)。 VSTO的解决方法是使用AutoOpen
代替,当模板作为VSTO加载项打开时,它将执行该子例程中的代码。
您可以在VBA中尝试这三个(在Word中,按 Alt + F11 进入Visual Basic编辑器):
Sub AutoNew()
MsgBox "AutoNew runs when creating a document from a template"
End Sub
Sub AutoOpen()
MsgBox "AutoOpen runs when opening a template as a document"
End Sub
Sub AutoExec()
MsgBox "AutoExec runs when loading an add-in (a global template)"
End Sub
另一种情况是您没有在开发计算机的Word安全设置上将安全设置设置为“低”。
关于您的更新#2,这通常发生在调试模式下运行VSTO时(F5而不是编译并运行它Ctrl + F5)。你能确认一下它是怎么运行的吗?如果它既不是其中之一,它是否仍然正常。当你将它部署到测试机器上时?
最后,如果您可以发布完整的启动脚本,那将有助于确定问题的确切位置。
答案 1 :(得分:0)
2003模板是否可能正在创建DOCX或DOTX文件,而不是DOCM或DOTM文件?使用2003及更高版本时,宏代码将在DOCX或DOTX文件中运行。