我有一个问题 - Excel 和 Word 的实例在同一过程中的行为不同。看看代码。想法是有一个程序来处理以各种格式组合在 excel 和 word 中重新保存文件。
问题是我注意到 word 和 excel 的行为不同 - appWord 和 appExcel 具有不同的类型名称。在某些时候,appWord 从应用程序更改为对象,这使得它无法关闭。我不理解行为的差异,因为应用于它们的代码是相同的。
Option Explicit
Dim fso
Dim appWord
Dim appExcel
Set fso = CreateObject("Scripting.FileSystemObject")
startWord
ResaveFiles appWord.Documents, "docx", 12, 0
appWord.quit
startExcel
ResaveFiles appExcel.Workbooks, "xlsx", 51, 56
appExcel.quit
MsgBox "All done."
Sub ResaveFiles(appType, srcExtName, srcExtNum, tmpExtNum)
Dim objFile
Dim objOpenFile
Dim strDirectory
For Each objFile in fso.GetFolder(".").Files
If lcase(fso.GetExtensionName(objFile)) = srcExtName Then
If typeName(appType) = "Documents" Then StartWord
If typeName(appType) = "Workbooks" Then StartExcel
Set objOpenFile = appType.Open(objFile.path)
strDirectory = fso.BuildPath(objOpenFile.path, fso.GetBaseName(objOpenFile.name) & "._temp")
objOpenFile.SaveAs strDirectory, tmpExtNum
objOpenFile.Close
msgBox typename(appType) & objFile
msgBox typename(appWord) 'First typename test
msgBox Typename(appExcel)
If typeName(appType) = "Documents" Then appWord.Quit
If typeName(appType) = "Workbooks" Then appExcel.Quit
set objOpenFile = appType.Open(strDirectory)
objOpenFile.SaveAs objFile.path, srcExtNum
objOpenFile.Close
fso.DeleteFile(strDirectory)
msgBox typename(appWord) 'Second typename test
msgBox Typename(appExcel)
End If
Next
End Sub
'Start Word
Sub StartWord
Set appWord = CreateObject("Word.Application")
appWord.visible = false
appWord.DisplayAlerts = false
End Sub
'Start Excel
Sub StartExcel
Set appExcel = CreateObject("Excel.Application")
appExcel.visible = false
appExcel.DisplayAlerts = false
End Sub
我已经通过以下方式对其进行了测试(使用两个类型名测试) - 当有可用的 word 文件时,首先 appWord 是 Application 并且 appExcel 为空,然后它更改为 Object 并且 appExcel 保持为空(在这种情况下,当子过程在 AppWord.Quit 处结束)。当没有 word 文件,并且脚本正在处理 Excel 时,首先 appWord 是 Object,appExcel 是 Application,然后 appWord 仍然是 Object,appExcel 仍然是 Application - 在这种情况下,当子过程结束时,appExcel 上没有错误。辞职。