【问题标题】:Excel to Word VBA Export - Word Documents Not Being CreatedExcel 到 Word VBA 导出 - 未创建 Word 文档
【发布时间】:2019-05-10 01:32:18
【问题描述】:

我正在运行 Excel 到 Word 导出,我无法基于模板创建/保存新文档。每个循环都会重新打开单词模板,替换模板中的 > 值,然后继续下一个。

(背景 - 我在 Excel 中有一个包含 32 行和 70 列的表。我创建了一个相应的 word 模板,其中包含要从 excel 表中替换的值(例如,)。在运行时,它导出基于 Excel 工作表中对应标签(例如 )到 Word Doc 的值)。它似乎一直在工作,直到它到达 WordDoc.SaveAs Filename

我得到的错误是

是否要将文档另存为模板名称?是/否

它停在那里并且不创建模板,而只是更改模板文件。

谁能建议解决这个问题?

Sub CreateWordDoc()
Dim BenefitRow, BenefitCol, LastRow As Long
Dim TagName, TagValue, Filename As String
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim WordContent As Word.Range
On Error Resume Next
With Sheets("VBA Output")


Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True 'Make visible



LastRow = .Range("A9999").End(xlUp).Row 'Determine last row
For BenefitRow = 4 To 6
Set WordDoc = WordApp.Documents.Open(Filename:=" template name.dotm", ReadOnly:=False) 'Open Template saved as .dotm
For BenefitCol = 1 To 79
TagName = .Cells(3, BenefitCol).Value 'Tag Name
TagValue = .Cells(BenefitRow, BenefitCol).Value 'Tag Value
With WordDoc.Content.Find
.Text = TagName
.Replacement.Text = TagValue
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll ',Forward:True, Wrap:wdFindContinue

End With
Next BenefitCol

Filename = ThisWorkbookPath & "\" & .Range("E" & BenefitRow).Value & ".docx"
WordDoc.SaveAs Filename
WordDoc.Close

Next BenefitRow
End With
WordApp.Quit

End Sub

【问题讨论】:

  • 失败时Filename的值是多少?
  • 你为什么不使用 mailmerge 呢?
  • Macropod 会更简单吗?
  • 您的代码包含一些典型的基本错误,这些错误是那些潜入尝试使用 VBA 而没有先完成教程的人。 BenefitRow 和 BenefitCol 是变体而不是多头。 TagName 和 TagValue 是变体而不是字符串。 Set WordApp = CreateObject("Word.Application") 应该是 Set WordApp = New WordApplication 而不是使用后期绑定对象。设置 WordDoc = WordApp.Documents.Open 应为 WordApp.Documents.Add 以基于模板创建新文档。您使用 open 意味着您正在更改模板本身。
  • 将选项显式放在代码模块的顶部。安装神奇的 RubbeDuck VBA 插件并注意代码检查。

标签: vba ms-word


【解决方案1】:

您看到的问题(错误消息)来自于打开一个模板文件,然后想要将其保存为“普通香草”文档。这不是 Word 的设计用途,这就是为什么 Word 基本上是在说:“你确定这就是你想要做的吗?”

除非目的是更改模板本身,否则不应打开模板。在这种情况下,它将再次保存为模板 - 不会显示任何消息。

从模板创建新文档时,使用Documents.Add 方法:

Set WordDoc = WordApp.Documents.Add(Template:=" template name.dotm") 

这会自动创建模板的副本 - 没有覆盖模板的危险。并且在执行SaveAs方法时不会出现问题中提到的消息。

【讨论】:

    最近更新 更多