【发布时间】: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 插件并注意代码检查。