-1

我有数百个 .doc word 文档,我需要在其中添加一个宏,该宏在 .doc 文件打开时运行,并根据文件名为所述文档创建标题。有没有办法批量做到这一点?我一直在单独打开每个文档并进入 Visual Basic --> Project --> This Document 然后插入一个包含代码的 .txt 文件。有没有一种快速的方法来处理多个文档?

4

2 回答 2

1

作为学习练习,将其放入 VBE 中 Normal(Normal.dot 模板)的“ThisDocument”部分

打开一个word文档,看看会发生什么。

我认为您不需要将代码放在每个文件中,我认为您应该可以在 Normal.dot 中使用 Document_Open 事件。

只需确保它在您打开的 Word 文档中显示为参考,但我不明白为什么它不会

如果您在每个文件中都绝对需要它,那么它可以完成,但问题是如果您对代码进行一个小的更改,您必须再次完成所有这些。代码的想法是编写一次,多次使用。

于 2015-03-06T04:20:44.413 回答
0

您可以编写更改其他文档中的 VBA 代码的 VBA 代码,但您需要在信任中心选项中“信任对 VBA 项目对象模型的访问”。如果您下载带有恶意 VBA 代码的 Word 文档,这可能会使您接触到病毒代码。本质上,您想要做的是编写 VBA 病毒。这样做有正当的理由,也有恶意的理由,我将使用这些技术的道德问题留给用户。知识本身并不是恶意的。

这是肉,您需要编写自己的代码来循环浏览文档并可能将它们保存为 .docm 文件。

Sub ReplaceCode()

Set oDoc = ActiveDocument
Set oComponents = oDoc.VBProject.VBComponents

For i = oComponents.Count To 1 Step -1
    If oComponents(i).Type = 100 And oComponents(i).Name = "ThisDocument" Then
        With oComponents(i).CodeModule
            .DeleteLines 1, .CountOfLines
            .AddFromFile "C:\ThisDocument.cls"
        End With
    End If
Next i

End Sub

此外,如果您通过从 VBA 导出来创建代码文件,则需要从 .cls 文件的顶部删除它:

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END

就个人而言,我会从 Excel 驱动它,可能使用工作表来保存要更新的文件或位置的列表,并使用另一个工作表来填充代码的更新文件列表。

于 2018-05-21T15:12:21.630 回答