0

我有一个应该处理 word 和 excel 文件的子程序。为了使其更通用,我想将一些元素作为参数传递,而不是多次编写具有细微差别的相同内容。

该过程接受文件的扩展名,效果很好。但是,我还需要使用 appWord.Documents.Open 或 appExcel.Workbooks.Open 来打开文件。如何存储它并将其作为过程的参数调用?

ResaveFiles "appExcel.Workbooks", "docx", 12, 0
ResaveFiles "appExcel.Workbooks", "doc", 0, 12
ResaveFiles "appWord.Documents", "xlsx", 56, 51
ResaveFiles "appWord.Documents", "xls", 51, 56


Sub ResaveFiles(appType, srcExtName, srcExtNum, tmpExtNum)
    If lcase(fso.GetExtensionName(objFileOrig)) = srcExtName then
        <<StartWord>>
                Set objOpenFile = (appType.Open(objFileOrig.path))
                ...

所以,我最终的目标是拥有一个而不是四个过程,因为它们之间的唯一区别是文件格式和正在调用的应用程序。

我对文件格式没有任何问题,但是,我无法将参数“appWord.Documents”传递给 Set objOpenFile = (appType.Open(objFileOrig.path)) 语句。上面显示的版本似乎不起作用,因为参数显示为字符串。有没有办法优化这个?

4

1 回答 1

2

如果您已经创建了对象appExcelappWord更早,请删除它们周围的“”标记。例如,下面打开每个 Word 和 Excel 的空白文件:

Dim oExcel, oWord

set oExcel = CreateObject("Excel.Application")
set oWord = CreateObject("Word.Application")

TestOpen oExcel.Workbooks, "C:\Test\blank.xlsx"
TestOpen oWord.Documents, "C:\Test\blank.docx"

Sub TestOpen(oApp, sFile)
    Dim oFile
    oApp.Parent.Visible = True
    Set oFile = oApp.Open(sFile)
    Wscript.Echo "File opened: " & oFile.Name
    Set oFile = Nothing
End Sub

Set oExcel = Nothing
Set oWord = Nothing

示例输出:

命令输出

于 2013-11-11T23:05:35.277 回答