1

更新 3:

当我保存了 vb6 脚本、关闭单词、开始单词,然后像通常运行模板一样运行模板时会发生这种情况,即 strTemplate 变为 Normal.doc。然后,只要我回到尚未通过 vsto 保存的原始模板,就会回到变量 strTemplate 中的 Letter.doc ...

更新 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 个文档属性。但这似乎不是问题。

似乎问题与附加了 normal.dot 的 vsto 模板有关,而原始的非 vsto 模板没有附加 normal.dot。

是否可以从新模板中删除附加的 normal.dot ?

原始问题:

我正在使用 Visual Studio 2008 创建一个 Word 2003 模板项目。我选择了“使用现有模板”选项,它在后台已经有一些 vb6 宏脚本。出于某种原因,当我保存 Visual Studio 项目时,vb6 脚本停止工作。

当模板在word中打开时,旧的vb6脚本会立即运行,但是当我只是在vs2008中使用模板而不添加额外的功能并保存项目并构建项目时,当我尝试用word打开模板时,旧的启动脚本不起作用。

为什么会这样?

4

2 回答 2

2

可能的情况是您AutoExec在 Word 2003 .dot VBA 中调用了一个例程。这在部署为 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)。你能确认你是如何运行它的吗?如果两者都不是,那么将它部署到测试机时是否仍然是 normal.dot ?

最后,如果您可以发布完整的启动脚本,这将有助于确定问题的真正所在。

于 2011-03-22T18:00:25.167 回答
0

2003 模板是否有可能创建 DOCX 或 DOTX 文件,而不是 DOCM 或 DOTM 文件?对于 2003 及更高版本,宏代码在 DOCX 或 DOTX 文件中时不会运行。

于 2011-03-17T16:01:57.487 回答