将subprocedure参数传递给set object语句

时间:2013-11-11 22:16:08

标签: vbscript ms-office

我有一个应该处理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))语句。上面提供的版本似乎不起作用,因为参数显示为字符串。 有没有办法优化这个?

1 个答案:

答案 0 :(得分:2)

如果您之前已经创建了对象appExcelappWord,请删除&#34;&#34;他们周围的痕迹。例如,下面打开每个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

示例输出:

cmd output