我有一个 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/