Excel 编辑后关闭嵌入对象
我在使用嵌入式Word文件执行邮件合并时遇到一些问题。本质上 我正在尝试构建一个宏来:Excel 编辑后关闭嵌入对象,excel,vba,ms-word,exit,mailmerge,Excel,Vba,Ms Word,Exit,Mailmerge,我在使用嵌入式Word文件执行邮件合并时遇到一些问题。本质上 我正在尝试构建一个宏来: 打开一个嵌入的Word文件(假设该文件是Object(2)) 将导出表连接到单词fie 预览结果 更新目录 将文件导出为PDF格式 关闭word应用程序,打开已完成的PDF 以下是我到目前为止编写的代码,但它不会在以后关闭WINWORD应用程序: Public Sub fExportSVF() Dim WdObj As Object Dim WdApp As Word.Applicati
- 打开一个嵌入的Word文件(假设该文件是Object(2))
- 将导出表连接到单词fie
- 预览结果
- 更新目录
- 将文件导出为PDF格式
- 关闭word应用程序,打开已完成的PDF
Public Sub fExportSVF()
Dim WdObj As Object
Dim WdApp As Word.Application
Dim WdDoc As Word.Document
Dim intIndex As Integer
Dim strPeril As String
Dim strClaimNumber As String
Dim strPHName As String
Dim strSaveLoc As String
Dim strWbName As String
Dim strTempLoc As String
Dim xlObj As Object
Application.ScreenUpdating = False
Call fUnhideSheet("EXPORT_DATA")
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
strTempLoc = Environ("TEMP") & Int((9999 - 1 + 1) * Rnd + 1) & ".xlsm"
strWbName = Worksheets("Settings").Range("B4").Value
strPeril = Worksheets("Settings").Range("B3").Value
strClaimNumber = Worksheets("Settings").Range("B1").Value
strPHName = Worksheets("Settings").Range("B2").Value
If Dir(strTempLoc) <> "" Then Kill strTempLoc
Set xlObj = CreateObject("Scripting.FileSystemObject")
xlObj.CopyFile ThisWorkbook.FullName, strTempLoc, True
strSaveLoc = ActiveWorkbook.Path & "\" & strClaimNumber & _
" - " & strPHName & " - " & strPeril & ".pdf"
Select Case strPeril
Case "Acc"
intIndex = 2
Case "Acci"
intIndex = 3
Case "AD"
intIndex = 4
Case "Es"
intIndex = 5
Case "Fi"
intIndex = 6
Case "Fld"
intIndex = 7
Case "Impt"
intIndex = 8
Case "St"
intIndex = 9
Case "Th"
intIndex = 10
End Select
Set WdObj = Worksheets("Settings").OLEObjects(intIndex)
WdObj.Activate
WdObj.Object.Application.Visible = False
Set WdApp = GetObject(, "Word.Application")
Set WdDoc = WdApp.ActiveDocument
WdApp.Visible = True
WdDoc.MailMerge.MainDocumentType = wdFormLetters
WdDoc.MailMerge.OpenDataSource Name:= _
strWbName _
, 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=" & strTempLoc & _
";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet " & _
"OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine " _
, SQLStatement:="SELECT * FROM `EXPORT_DATA$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
WdDoc.MailMerge.ViewMailMergeFieldCodes = wdToggle
WdDoc.TablesOfContents(1).Update
WdDoc.ExportAsFixedFormat outputfilename:=strSaveLoc, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
WdApp.ActiveDocument.Close wdDoNotSaveChanges
Set WdApp = Nothing
Set WdObj = Nothing
Kill strTempLoc
Call fHideSheet("EXPORT_DATA")
Application.ScreenUpdating = True
End Sub
Public Sub-fExportSVF()
作为对象的Dim WdObj
将WdApp设置为Word.Application
将WdDoc设置为Word.Document
Dim intIndex为整数
作为字符串的Dim strPeril
Dim strClaimNumber作为字符串
将strPHName设置为字符串
作为字符串的Dim STRASVELOC
作为字符串的Dim strWbName
作为字符串的Dim strTempLoc
作为对象的Dim xlObj
Application.ScreenUpdating=False
调用fUnhideSheet(“导出数据”)
Application.DisplayAlerts=False
此工作簿。保存
Application.DisplayAlerts=True
strTempLoc=Environ(“TEMP”)和Int((9999-1+1)*Rnd+1)和“.xlsm”
strWbName=工作表(“设置”).范围(“B4”).值
strPeril=工作表(“设置”).范围(“B3”).值
STRCAIMNUMBER=工作表(“设置”).范围(“B1”).值
strPHName=工作表(“设置”).范围(“B2”).值
如果Dir(strTempLoc)“,则杀死strTempLoc
Set xlObj=CreateObject(“Scripting.FileSystemObject”)
xlObj.CopyFile ThisWorkbook.FullName,strTempLoc,True
strSaveLoc=ActiveWorkbook.Path&“\”&strcaimnumber&_
“-”&strPHName&“-”&strPeril&“.pdf”
选择Case strPeril
案例“Acc”
intIndex=2
“Acci”案
intIndex=3
案例“广告”
intIndex=4
案例“Es”
intIndex=5
案例“Fi”
intIndex=6
案例“Fld”
intIndex=7
“进口”案
intIndex=8
案例“St”
intIndex=9
案例“Th”
intIndex=10
结束选择
Set WdObj=工作表(“设置”).OLEObjects(intIndex)
WdObj.激活
WdObj.Object.Application.Visible=False
Set WdApp=GetObject(,“Word.Application”)
设置WdDoc=WdApp.ActiveDocument
WdApp.Visible=True
WdDoc.MailMerge.MainDocumentType=wdFormLetters
WdDoc.MailMerge.OpenDataSource名称:=_
strWbName_
,ConfirmConversions:=False,只读:=False,LinkToSource:=True_
AddToRecentFiles:=False,PasswordDocument:=“”,PasswordTemplate:=“”_
WritePasswordDocument:=“”,WritePasswordTemplate:=“”,Revert:=False_
格式:=wdOpenFormatAuto,连接:=_
“Provider=Microsoft.ACE.OLEDB.12.0;用户ID=Admin;数据源=“&strTempLoc&_
“Mode=Read;Extended Properties=”“HDR=YES;IMEX=1;”;Jet“&_
“OLEDB:系统数据库=”“”;Jet OLEDB:注册表路径=“”;Jet OLEDB:引擎”_
,SQLStatement:=“从`导出数据$`中选择*”,SQLStatement1:=”_
子类型:=wdmergesubiteaccess
WdDoc.MailMerge.viewmailmergefieldcode=wdToggle
WdDoc.TablesOfContents(1).更新
WdDoc.ExportAsFixedFormat outputfilename:=strSaveLoc_
ExportFormat:=wdExportFormatPDF,OpenAfterExport:=True,OptimizeFor:=_
wdExportOptimizeForPrint,范围:=wdExportAllDocument,从:=1到:=1_
Item:=wdExportDocumentContent,IncludeDocProps:=True,KeepIRM:=True_
CreateBookmarks:=wdExportCreateNoBookmarks,DocStructureTags:=True_
BitmapMissingFonts:=真,UseISO19005_1:=假
WdApp.ActiveDocument.Close wdDoNotSaveChanges
设置WdApp=Nothing
设置WdObj=Nothing
杀死strTempLoc
调用fHideSheet(“导出数据”)
Application.ScreenUpdating=True
端接头
因此,除了关闭WINWORD应用程序之外,它还可以执行其他所有操作。除此之外,我注意到,如果有另一个文档已经打开,它也会使该文档不可见
需要帮忙吗
干杯
编辑:此外,运行此代码的机器上同时有Word 97和Word 2007。文档需要在Word 2007中打开和编辑。更改此行(将WdApp设置为Word的现有实例,如果有的话):
Set-WdApp=GetObject(,“Word.Application”)
为此,将创建Word的新实例,以防止关闭可能打开的其他文档:
Set-WdApp=CreateObject(“Word.Application”)
要关闭wdApp
,请使用退出方法:
wdApp.Quit