excel - 使用 Excel 保存带有名称的 Word 文件

标签 excel vba ms-word

我有一个 Word 模板,我将其与 <金额>、<帐户> 等一起使用,然后我在 Excel 中使用 VBA 脚本从单元格中提取数据,并将 <金额> 等替换为单元格中的值.

我现在工作得非常好,但我在保存 Word 文档时遇到了一些问题。本质上,我想让 Excel 脚本从单元格中提取文档的名称,然后将文档以其名称保存在不同的位置,以免保存在模板上。

本质上,我的目标是将数据填充到几个单元格中,然后触发 VBA 脚本,该脚本替换 Word 文档模板上的文本,然后使用特定名称保存文档。

我在这里尝试了类似问题的答案 Excel VBA to open word template, populate, then save as .docx file somewhere else但它在我的代码中不起作用。

这是迄今为止的现有代码:

Option Explicit

Public Sub WordFindAndReplace()
Dim ws As Worksheet, msWord As Object

Set ws = ActiveSheet
Set msWord = CreateObject("Word.Application")

With msWord
.Visible = True
.Documents.Open "/Users/Aafrika/Desktop/Test.docx"
.Activate

With .ActiveDocument.Content.Find
    .ClearFormatting
    .Replacement.ClearFormatting

    .Text = "<date>"
    .Replacement.Text = Format(ws.Range("C1").Value2, "dd/mm/yyyy")

    .Forward = True
    .Wrap = 1               'wdFindContinue (WdFindWrap Enumeration)
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False

    .Execute Replace:=2     'wdReplaceAll (WdReplace Enumeration)

    .Text = "<amount>"
    .Replacement.Text = Format(ws.Range("C2").Value2, "currency")

    .Forward = True
    .Wrap = 1               'wdFindContinue (WdFindWrap Enumeration)
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False

    .Execute Replace:=2     'wdReplaceAll (WdReplace Enumeration)


End With
.Quit SaveChanges:=True
End With
End Sub

任何关于如何让它发挥作用的想法都会很棒。提前致谢!

最佳答案

使用对象。它会让你的生活变得非常轻松。您正在保存并关闭原始文档。请参阅此示例。这将创建相关对象,然后使用它。

这就是你正在尝试的吗? (未经测试)

Option Explicit

Private Sub WordFindAndReplace()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim msWord As Object
    Dim msWordDoc As Object
    Set msWord = CreateObject("Word.Application")

    msWord.Visible = True
    Set msWordDoc = msWord.Documents.Open("/Users/Aafrika/Desktop/Test.docx")

    With msWordDoc
        With .Content.Find
            .ClearFormatting
            .Replacement.ClearFormatting

            .Text = "<date>"
            .Replacement.Text = Format(ws.Range("C1").Value2, "dd/mm/yyyy")

            .Forward = True
            .Wrap = 1               'wdFindContinue (WdFindWrap Enumeration)
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False

            .Execute Replace:=2     'wdReplaceAll (WdReplace Enumeration)

            .Text = "<amount>"
            .Replacement.Text = Format(ws.Range("C2").Value2, "currency")

            .Forward = True
            .Wrap = 1               'wdFindContinue (WdFindWrap Enumeration)
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False

            .Execute Replace:=2     'wdReplaceAll (WdReplace Enumeration)
        End With
        .SaveAs Filename:="Some File Name", FileFormat:=12 'wdFormatXMLDocument
        DoEvents
        .Close (False)
    End With

    msWord.Quit
End Sub

关于excel - 使用 Excel 保存带有名称的 Word 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57635091/

相关文章:

java - 如何使用 apache poi 确定合并单元格中的行数?

vba - excel超链接什么都没有

excel - 如何在Excel中分离和转置行?

PHP读取word文档只获取Email地址

vba - Word 2010 VBA 在突出显示的范围内替换

java - 当新的 Excel 工作表添加到文件夹中时自动更新数据库

excel - 索引匹配时间范围之间的多个条件(Excel)

excel - 如何获取用户窗体的边框大小?

excel - 具有特定模式的字符串分隔公式

java - Java 中的 Word 文档创建 API