使用VB.Net将宏代码添加到Word文档

时间:2016-05-17 16:45:44

标签: vb.net vba insert ms-word word-vba

好的,让我详细解释一下。

假设有一个名为“Word.doc”的单词文件

我想要做的是基本上使用VB.NET来做以下事情:

打开word文档

添加宏代码

例如

将以下宏代码添加到Word文档

Sub AutoOpen()
    Msgbox 
End Sub

然后保存此文档。

请记住我想将宏代码插入到Word文档中而不是从文档中检索已存在的宏代码

2 个答案:

答案 0 :(得分:0)

这是一个简单的VBA宏,它显示了如何使用Word对象模型将宏添加到文档中(VB.NET代码几乎相同)。

Sub NewDocWithCode()
    Dim doc As Document

    Set doc = Application.Documents.Add
    doc.VBProject.VBComponents("ThisDocument").CodeModule.AddFromString _
            "Sub AutoOpen()" & vbLf & _
            "   MsgBox ""It works""" & vbLf & _
            "End Sub"
End Sub

请注意,运行此代码需要访问VBA项目对象模型(这需要在Word选项的信任中心中启用)。

答案 1 :(得分:0)

通过对象模型在VBA编辑器中使用对象需要引用Microsoft Office VBA Extensibility 5.3对象模型,您可以在Visual Studio的“项目/添加引用”的“COM”选项卡中找到该模型。

我想在代码顶部添加一个Imports语句,这样我就不必总是写出完整的命名空间限定条件:

Imports VBE = Microsoft.Vbe.Interop

AutoOpen宏需要是普通代码模块中的“公共”Sub。假设您要向文档添加新的代码模块,请使用VBComponents.Add方法并指定枚举类型vbext_ct_StdModule

默认情况下,VBE会将新模块命名为“Module#” - 一个递增的数字。如果您需要以编程方式再次寻址此模块(例如,查看它是否存在),最好为其指定一个名称。

使用AddFromString方法添加代码作为字符串。

如果要向文档添加代码,则文档可能是docx类型,这意味着它不能包含宏代码。文档必须具有扩展名docm才能包含宏代码。因此,您可能需要在文档上使用SaveAs方法来更改文件类型和名称!

Private Sub InsVbaCode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsVbaCode.Click
    'Helper method to get current Word instance or, if none, start one
    GetWordProcess()

    Dim doc As Word.Document = WordApp.ActiveDocument
    Dim vbModule As VBE.VBComponent = doc.VBProject.VBComponents.Add(VBE.vbext_ComponentType.vbext_ct_StdModule)
    vbModule.Name = "basAddedCode"
    vbModule.CodeModule.AddFromString( _
      "Sub AutoOpen()" & vbLf & _
      "   MsgBox ""Document "" & ActiveDocument.FullName & "" has been opened successfully!""" & vbLf & _
      "End Sub")
    'doc.Save() or doc.SaveAs to change file type and/or name
End Sub