用于Office的Visual Studio工具打破了VB6

时间:2011-03-17 14:17:19

标签: visual-studio-2008 vba .net-3.5 vsto office-2003

  

更新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中打开模板时,旧的启动脚本不起作用。

为什么会这样?

2 个答案:

答案 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文件中运行。