vba - Excel 到 Word VBA 导出 - 未创建 Word 文档
问题描述
我正在运行 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
解决方案
您看到的问题(错误消息)来自打开模板文件,然后想要将其保存为“普通香草”文档。这不是 Word 的设计用途,这就是为什么 Word 基本上是在说:“你确定这就是你想要做的吗?”
除非目的是更改模板本身,否则不应打开模板。在这种情况下,它将再次保存为模板 - 不会显示任何消息。
从模板创建新文档时,请使用以下Documents.Add
方法:
Set WordDoc = WordApp.Documents.Add(Template:=" template name.dotm")
这会自动创建模板的副本- 没有覆盖模板的危险。SaveAs
并且执行该方法时不会出现问题中提到的消息。
推荐阅读
- javascript - D3.js 绘图不渲染
- python - 如何为 Seaborn RegPlot 选择不同的色调
- optimization - Julia - 使用 MathOptInterface 定义线性规划问题
- oracle-cloud-infrastructure - OCI 计算实例启动失败
- python - 将 2D 矩阵转换为特定长度向量的 TensorFlow 层
- python - PyTorch 在尝试第二次向后遍历图形时出错
- reactjs - TypeError:无法读取反应js中未定义的属性“长度”
- python - 尝试输出元素时返回错误“错误'NOT NULL约束失败:com.atid'发生”
- ios - 在 Swift 中使用 Cloudkit 和 Core Data 重新安装应用程序后如何更新视图?
- delphi - 如果控件不可点击,我如何“恢复为继承”?