【发布时间】:2019-08-24 04:28:26
【问题描述】:
我有一个 Word 模板,与
我现在可以很好地运行它,但是我在保存 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
任何关于如何让它发挥作用的想法都会很棒。提前致谢!
【问题讨论】:
-
.Quit SaveChanges:=True您正在覆盖主文档。你必须使用.SaveAs。在 Word 中录制宏,您将获得.SaveAs的代码 -
@SiddharthRout 我试过这个,但它保存的是 Excel 文档,而不是 Word 文档
-
声明一个word文档对象并使用它。
Dim oDoc As Object: Set oDoc = msWord.Documents.Open("/Users/Aafrika/Desktop/Test.docx")然后使用oDoc.SaveAs -
我已经发布了一个例子。您可能需要刷新页面才能看到它