如何解决excel 脚本/邮件合并 word
我收到此错误,VBA 错误运行时 438,我就是不明白为什么,我将简要说明我应该怎么做,
这个宏所在的excel文件是一个word文件(mod.docm)通过邮件合并获取数据的数据库。
我想获得的是excel文件中的一个按钮,点击后会生成一个带有word模型的pdf。
脚本运行完美,直到他必须在 word 文件中选择准确的记录。
谁能给我一些建议?
Public Sub StampaUnione()
Dim wordApp As Object
Dim wordDoc As Object
Dim strFile As String
Const wdExportFormatPDF As Integer = 17
Const wdExportOptimizeForOnScreen As Integer = 1
Const wdExportAllDocument As Integer = 0
Const wdExportCreateNoBookmarks As Integer = 0
strFile = "C:\Users\Desktop\File\mod.docm"
Set wordApp = CreateObject("word.Application")
Set wordDoc = wordApp.Documents.Open(strFile)
wordApp.Visible = True
Application.DisplayAlerts = False
'recupero il numero matricola da stampa unione
Var = Sheets("Foglio1").Range(ActiveCell.Address)
'genero la directory dovve salvare il file
cartellaMadre = "C:\Users\Desktop\File\" & Var & "\"
'se la cartella non esiste la creo
If Len(Dir(cartellaMadre,vbDirectory)) = 0 Then
MkDir cartellaMadre
End If
'genero la sotto cartella dove salvare il file
cartellaFiglia = "C:\Users\File\" & Var & "\" & "Doc" & "\"
'se la sotto cartella non esiste la creo
If Len(Dir(cartellaFiglia,vbDirectory)) = 0 Then
MkDir cartellaFiglia
End If
'wordApp.Documents.MailMerge.ViewMailMergeFieldCodes = False
'wordApp.Documents.MailMerge.DataSource.ActiveRecord = wdFirstRecord
'If wordApp.Documents.MailMerge.DataSource.FindRecord(FindText:="020120",_
'Field:="Matricola") = True Then
'MsgBox "Data was found"
'End If
MsgBox "I'm Here - error"
wordApp.Documents.MailMerge.MainDocumentType = wdFormLetters
wordApp.Documents.MailMerge.OpenDataSource Name:= _
"C:\Users\Desktop\File\DB_StampaUnione.xlsm",_
ConfirmConversions:=False,_
ReadOnly:=False,_
LinkToSource:=True,_
AddToRecentFiles:=False,_
PasswordDocument:="",_
PasswordTemplate:="",_
WritePasswordDocument:="",_
WritePasswordTemplate:="",_
Revert:=False,_
Format:=wdOpenFormatAuto,_
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\Cristian\Desktop\File\DB_StampaUnione.xlsm;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Data",_
SQLStatement:="SELECT * FROM `Foglio1$` WHERE Matricola = '030120'",SQLStatement1:="",SubType:= _
wdMergeSubTypeAccess
wordApp.Documents.MailMerge.ViewMailMergeFieldCodes = wdToggle
'genero il PDF
wordDoc.ExportAsFixedFormat OutputFileName:= _
"C:\Users\File\" & Var & "\" & "Doc" & "\" & "D" & Var & ".pdf",_
ExportFormat:=wdExportFormatPDF,_
OpenAfterExport:=False,_
OptimizeFor:=wdExportOptimizeForOnScreen,_
Range:=wdExportAllDocument,_
From:=1,_
To:=1,_
Item:=wdExportDocumentContent,_
IncludeDocProps:=True,_
KeepIRM:=True,_
CreateBookmarks:=wdExportCreateNoBookmarks,_
DocStructureTags:=False,_
BitmapMissingFonts:=True,_
UseISO19005_1:=True
wordDoc.Close 'chiude file di word
wordApp.Quit 'chiude word
Application.DisplayAlerts = True
Set wordApp = Nothing
Set wordDoc = Nothing
End Sub
解决方法
正如您在评论中提到的,您已经添加了对 Word 对象库的引用。把你的代码改成早期绑定,这会在编译时暴露出类似的问题:
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
(...)
wordApp.Documents.MailMerge.MainDocumentType = wdFormLetters
这将引发编译器错误:“未找到方法或数据成员”。编译器突出显示“MailMerge”,这意味着 Word 应用程序的 Documents
属性没有这样的成员。
仔细想想,原因很明显:Documents
-属性是所有打开的word文档的列表。您的意思是单个文档的 MailMerge
属性:
wordApp.Documents(1).MailMerge.MainDocumentType = wdFormLetters
但是,不要使用它。您已经有了对文档的引用(存储在变量 wordDoc
中),因此请使用它:
wordDoc.MailMerge.MainDocumentType = wdFormLetters
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。