如何在VBScript中使用GetObject

6

我很新手VBScript。这是我的代码,它创建一个文本文件并附加一个对象:

Set objExcel = CreateObject("Scripting.FileSystemObject")
objExcel.CreateTextFile("C:\mine.txt")

我该如何使用getObject(Pathname,[class])函数?

2个回答

10

VBScript GetObject的文档可以在这里找到。以下是VBScript示例:

Set objExcelFile = GetObject("C:\Scripts\Test.xls")
WScript.Echo objExcelFile.Name
objExcelFile.Close

这段代码可以获取C:\Scripts\Test.xls中包含的Excel工作簿对象。您可以使用TypeName()函数确认它:

Set objExcelFile = GetObject("C:\Scripts\Test.xls")
WScript.Echo objExcelFile.Name
WScript.Echo TypeName(objExcelFile)
objExcelFile.Close

输出结果为:
test.xls
Workbook

如果指定的 Excel 工作簿不存在,脚本将返回错误。如果已经有一个 Excel 实例在运行,您可以使用以下代码来获取对它的引用:
Set objExcel = GetObject( , "Excel.Application")

For Each objWorkbook In objExcel.Workbooks
    WScript.Echo objWorkbook.Name
Next

objExcel.Quit

注意在“Excel.Application”之前的逗号。脚本获取正在运行的Excel应用程序的引用,列出打开的工作簿名称并退出Excel。如果没有正在运行的Excel实例,则会收到错误消息。这也是为什么无法使用GetObject()获取Scripting.FileSystemObject的实例 - 没有正在运行的实例。

如果在内存中已经运行了Scripting.FileSystemObject的实例,则可以使用GetObject。请尝试以下代码:

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFso1 = GetObject("", "Scripting.FileSystemObject")

WScript.Echo TypeName(objFso)
WScript.Echo TypeName(objFso1)

你可以看到,首先需要使用CreateObject()函数,在FileSystemObject运行时获取对其的引用。但这样做并没有太多意义,因为你已经有一个对它的引用(objFso)。因此,使用CreateObject()来创建一个FileSystemObject实例。


1
除非对象是单个实例,如果您将 GetObject 函数的路径名参数(第一个参数)指定为空字符串(但不要省略它),则效果类似于 CreateObject,因此 GetObject 将返回该对象的新实例而不是当前实例。 - omegastripes
如描述所示,使用VBScript的Set objExcel = GetObject( , "Excel.Application")。但是不要使用Set objExcel = WScript.GetObject( , "Excel.Application"),因为它会抱怨缺少参数。我以前从未意识到这种差异。 - J. Woolley

6

请注意,GetObject()还接受以下参数中的单个标识符:

"iis:<metabasepath>" - 允许程序员查看和更改连接到此计算机的任何Web服务器的关键IIS功能。

"java:<classname>" - 使用Java虚拟机返回在%system root%\java\trustlib文件夹中找到的未注册Java对象的引用。

"script:<absolutepath>" - 返回对未注册的Windows脚本组件或其他支持的脚本类型的引用。

"clsid:<clsid>" - 通过其在注册表中的类ID返回对象的引用。

"WinMgmts:<string>" - 允许使用WMI访问基本的Windows操作系统功能。

"OBJREF:<base64encodedstring>" - 返回对正在运行的对象实例的访问。

"queue:<clsid/progid>" - 通过MSMQ激活排队的COM+组件。

"new:<clsid/progid>" - 允许实例化支持IClassFactory指针(包括排队组件)的任何COM组件。

来源:http://web.archive.org/web/20021001133221/http://www.aspemporium.com/aspEmporium/tutorials/GetObject/index.asp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接