让我开始编程和调试Microsoft Office自动化

时间:2009-11-09 15:53:56

标签: ms-word ms-office word-vba

我正在使用Microsoft Office 2003并创建一堆模板文档来标准化某些任务。我在Superuser.com上问了这个问题并且没有得到任何答复所以我认为它太过程序化了,希望我能在这里有更好的运气。

我需要自动化使用一堆Office(主要是Word)模板的工作流程。我想要的是在共享驱动器上的“My Foo Bar Stuff”中使用“My Template Foo.dot”和“My Template Bar.dot”等,并让用户双击模板以创建新的Foo或杆

我真正喜欢的是用户双击Foo模板并提示输入与其任务相关的几个项目(例如,项目编号),并在模板中更改名称Save将默认为“Foo for Project 1234.doc”。

我问Google Groups并得到一个有效的答案......一段时间。然后,当我通过双击模板创建新文档时,我的AutoNew宏停止了。我不知道为什么或如何调试它。

在班级模块/本申请表中,我有:

Sub AutoNew()
    Dim Project As String
    Project = InputBox("Enter the Project Number")
    ActiveDocument.SaveAs "Project " & Project & " Notes.doc"
End Sub

在Microsoft Word Objects / ThisDocument中,我有:

Private Sub Document_New()

End Sub

我真的不知道为什么或来自哪里。

在工具/宏安全性中......我将安全级别设置为“低”。

我是一名软件工程师,拥有超过25年的经验,但是有一个完整的Office自动化菜鸟。欢迎提供具体的解决方案和指向“这是如何自动化Word”的常见问题解答。感谢。


更新:如果我创建一个新模板(新建...,空白文档,另存为“我的新模板。”),并插入AutoNew()宏,则可行。那么是什么阻碍了我在现有模板上工作呢?

更新2:从旧模板中删除模块和功能并将其添加回来也是有效的。

2 个答案:

答案 0 :(得分:1)

您可以在ordre中将模板附加到已保存的文档中,以访问相关模板中包含的宏。

您可以使用Document对象的AttachedTemplate属性(即ActiveDocument)执行此操作。 请注意,我自己没试过。

Sub AutoNew()
   Dim Project As String
   Project = InputBox("Enter the Project Number")
   ActiveDocument.SaveAs "Project " & Project & " Notes.doc"

   ActiveDocument.AttachedTemplate = "\\path\to\templates\My Template Foo.dot"

End Sub

请参阅MSDN - Word 2003 VBA Language Reference - AttachedTemplate Property

希望有所帮助。

答案 1 :(得分:0)

检查宏是否仍包含在模板中。这听起来很愚蠢,但在以下情况下,它也会在Word 2003中出现:

  1. 创建一个包含宏的模板, 一切都很好
  2. 基于创建新文档文件
  3. 中的宏,宏踢
  4. 注意我可以改进模板 在这里和那里,我做了 在2)和SaveAs .DOT
  5. 中创建的文件
  6. 宏.DOT GONE!
  7. 为什么呢?因为存储在.DOT中的代码不会转到doc文件。

相关问题