我发现了如何在运行时插入VBA代码,以及如何删除所有VBA代码"/>

关于.net:以编程方式从Word 2007文档中提取宏(VBA)代码

关于.net:以编程方式从Word 2007文档中提取宏(VBA)代码

Programmatically extract macro (VBA) code from Word 2007 docs

是否可以使用API??从Word 2007 " docm "文档中提取所有VBA代码?

我发现了如何在运行时插入VBA代码,以及如何删除所有VBA代码,但没有将实际代码提取到我可以存储的流或字符串中(以后再插入其他文档中)。铅>

任何技巧或资源将不胜感激。

编辑:感谢所有人,Aardvark的答案正是我所寻找的。我已经将他的代码转换为C#,并能够使用Visual Studio 2008从类库中调用它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using Microsoft.Office.Interop.Word;
using Microsoft.Vbe.Interop;

...

public List<string> GetMacrosFromDoc()
{
    Document doc = GetWordDoc(@"C:\\Temp\\test.docm");

    List<string> macros = new List<string>();

    VBProject prj;
    CodeModule code;
    string composedFile;

    prj = doc.VBProject;
    foreach (VBComponent comp in prj.VBComponents)
    {
        code = comp.CodeModule;

        // Put the name of the code module at the top
        composedFile = comp.Name + Environment.NewLine;

        // Loop through the (1-indexed) lines
        for (int i = 0; i < code.CountOfLines; i++)
        {
            composedFile += code.get_Lines(i + 1, 1) + Environment.NewLine;
        }

        // Add the macro to the list
        macros.Add(composedFile);
    }

    CloseDoc(doc);

    return macros;
}

您可以将代码导出到文件中,然后再读回。

我一直在使用下面的代码来帮助我将某些Excel宏保持在源代码控制下(使用Subversion)


您必须添加对Microsoft Visual Basic for Applications Extensibility 5.3(或您拥有的任何版本)的引用。我的package盒上有VBA SDK等-所以这可能不是Office附带的。

还必须专门启用对VBA对象模型的访问-请参阅Word选项中的"信任中心"。这是Office提供的所有其他其他宏安全设置的补充。

此示例将从其所在的当前文档中提取代码-它本身是VBA宏(还将显示其自身以及任何其他代码)。还有一个Application.vbe.VBProjects集合可访问其他文档。尽管我从未做过,但我假设外部应用程序也可以使用此VBProjects集合打开文件。安全对于这些东西很有趣,因此可能很棘手。

我还想知道docm文件格式现在是什么-像docx这样的XML?那会是更好的方法吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub GetCode()

    Dim prj As VBProject
    Dim comp As VBComponent
    Dim code As CodeModule
    Dim composedFile As String
    Dim i As Integer

    Set prj = ThisDocument.VBProject
        For Each comp In prj.VBComponents
            Set code = comp.CodeModule

            composedFile = comp.Name & vbNewLine

            For i = 1 To code.CountOfLines
                composedFile = composedFile & code.Lines(i, 1) & vbNewLine
            Next

            MsgBox composedFile
        Next

End Sub

推荐阅读

    linux编译源代码命令?

    linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,l

    linux命令提交代码?

    linux命令提交代码?,工作,系统,地址,代码,命令,数据,信息,目录,标准,发行,求

    linux进程运行命令?

    linux进程运行命令?,系统,工作,状态,地址,信息,进程,基础,命令,管理,软件,lin

    linux快速删除命令行?

    linux快速删除命令行?,系统,软件,名称,数据,命令,文件,档案,不了,电脑,通用,l

    删除linux文件命令?

    删除linux文件命令?,名称,不了,文件夹,命令,文件,目录,方法,指令,子目录,选

    linux显示运行命令?

    linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

    linux下删除用户命令?

    linux下删除用户命令?,系统,代码,邮箱,用户组,命令,用户,名称,管理,电脑,账

    linux的删除所有命令?

    linux的删除所有命令?,不了,系统,名称,命令,文件夹,文件,目录,档案,数据,环

    linux同步代码命令?

    linux同步代码命令?,时间,系统,通信,网络,标准,图片,服务,代码,线程,单位,Lin

    linux删除类型命令?

    linux删除类型命令?,系统,档案,命令,文件,名称,环境,数据,不了,目录,文件夹,

    linux运行vim命令?

    linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令

    linux命令删除文件夹?

    linux命令删除文件夹?,系统,名称,环境,文件夹,不了,命令,文件,数据,档案,目

    linux监控命令运行?

    linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,lin

    linux拉取代码命令?

    linux拉取代码命令?,代码,工作,地址,命令,数据,系统,单位,生产,软件,目录,lin

    linux删除用什么命令?

    linux删除用什么命令?,档案,系统,命令,文件夹,文件,不了,名称,目录,终端,指

    linux删除用户组命令?

    linux删除用户组命令?,管理,系统,密码,电脑,名称,用户,用户组,名字,信息,工

    linux中命令停止运行?

    linux中命令停止运行?,系统,代码,第一,命令,进程,指令,程序,方法,接线,硬盘,l

    linux删除整行的命令?

    linux删除整行的命令?,系统,标的,数字,连续,档案,命令,光标,文件,模式,编辑,

    linux命令行图形编程?

    linux命令行图形编程?,系统,不了,情况,密码,工具,地方,百度,管理,图形界面,

    linux打开文档命令?

    linux打开文档命令?,密码,图片,系统,标准,命令,文件,终端,发行,信息,情况,Lin