Visual studio 2008 Visual Studio Office工具VB6

Visual studio 2008 Visual Studio Office工具VB6,visual-studio-2008,vba,.net-3.5,vsto,office-2003,Visual Studio 2008,Vba,.net 3.5,Vsto,Office 2003,更新3: 当我保存vb6时会发生这种情况 脚本,关闭word,启动word,然后 像平常一样运行模板 运行一个模板,即strTemplate 变得正常。doc。然后我一 返回到原始模板,该模板 尚未通过vsto保存,即 返回到在 变量strTemplate 更新2: 在我的启动脚本中,我有一行代码如下: strTemplate = ActiveDocument.AttachedTemplate 在名为Letter.dot的原始模板中,strTemplate=Letter.dot 但由于某些原因

更新3:

当我保存vb6时会发生这种情况 脚本,关闭word,启动word,然后 像平常一样运行模板 运行一个模板,即strTemplate 变得正常。doc。然后我一 返回到原始模板,该模板 尚未通过vsto保存,即 返回到在 变量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模板有两个文档属性。但这似乎不是问题

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

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

原始问题:

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

当模板在word中打开时,旧的vb6脚本会立即运行,但当我在vs2008中仅使用模板而不添加额外功能并保存项目并生成项目时,当我尝试在word中打开模板时,旧的启动脚本无法工作


为什么会发生这种情况?

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

可能的情况是,在Word 2003.dot VBA中有一个名为
AutoExec
的例程。当作为VSTO模板部署时,这不会执行,因为它不是Word运行
AutoExec
所需的加载项类型(它需要启动文件夹中的.wll文件或.dot文件)。VSTO的解决方法是使用
AutoOpen
,当模板作为VSTO加载项打开时,它将执行该子例程中的代码

您可以在VBA中尝试这三种方法(在Word中,按Alt+F11以进入Visual Basic编辑器):

另一种情况是,在开发机器的Word安全设置中,没有将安全设置设置为“低”


关于更新#2,这通常发生在您在调试模式下运行VSTO时(F5而不是编译并运行它Ctrl+F5)。你能确认你是如何运行它的吗?如果两者都不是,那么当您将它部署到测试机器上时,它仍然是normal.dot吗


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

文件扩展名似乎没有改变,您是说它正在创建一个dotx文件,但显示扩展名为.dot?DOCX,dotx直到2003年后才启动。不确定为什么这个答案被否决。DOCX、DOTX、DOCM和DOTM都是更新的压缩XML格式文件,更高版本的Office将保存到这些文件中。我相信它们是在Office 2003中引入的,但在2007年成为主流。Office XP和2000有一个插件包,允许在Office XP和2000中读取和写入这些新格式。至于在DOCX中保存文档,除非你做一些奇怪的事情,比如保存DOCX文件,然后他们手动将其重命名为文档(我以前见过这种情况,所以不要打折!)老实说,如果我正在创建一个模板,并且我想使用VBA(看起来像Vb6代码,你可以在Word中编辑它),然后我会跳过VS2008项目模板,只是创建一个新的word模板,然后就可以开始了。刚刚在VS2010中尝试过,当我创建一个新的word模板项目时,它创建的是一个DOTX文件,它肯定不会运行任何宏代码。我再也没有安装带有较旧VSTO的VS2008,因此我无法检查该特定组合。如果它创建的是一个普通的ol’DOT文件,那么你应该很好。创建项目,编译,然后在WORD中加载点文件(右键单击打开,而不仅仅是dbl单击点文件),然后您应该能够打开VBA宏编辑器,并确保所有宏内容都在那里,并且runnable.VBA不是VB6。此标记不正确。哪些代码未运行?它不会是自动运行宏,是吗。我似乎记得有一个问题,在某些情况下,autorun宏无法通过Word执行。在VS开发环境中加载可能是其中之一。请参阅原始问题中的更新1。请参阅原始问题中的更新2。确定。奇怪的也许是时候问一个不同的问题了。如果您有一个包含现有VBA代码的模板,那么a)保持该模板不变,并基于VSTO启动一个新项目是否更有意义?B)如果不可能,请将VBA代码翻译为VB.net(不太难)或C)避免使用VSTO,只需在VBA中添加附加功能即可。就个人而言,通过VSTO混合VBA和.net代码的想法是令人讨厌的。我不得不用一个项目来做,而且只持续了一段时间
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