我正在尝试从名为EXTRA的引用库应用程序创建一个名为ExtraScreen的特定类的实例。如何使用ExtraScreen类中的SendKeys函数?
到目前为止,我试过这个:
Dim software As EXTRA.ExtraScreen
software.SendKeys ("a")
结果是错误:
对象变量或未设置块变量。
答案 0 :(得分:1)
你还需要Set
来做某事:
Dim software As EXTRA.ExtraScreen
Set software = CreateObject("EXTRA.ExtraScreen")
或
Dim software As New EXTRA.ExtraScreen
答案 1 :(得分:0)
你已经声明了一个具有特定的早期绑定类型的对象变量 - 这意味着代码可以编译和编译。运行,然后项目有一个类型库的引用。
Dim software As EXTRA.ExtraScreen
Dim
语句不可执行:您无法在Dim
语句中设置断点。他们所做的只是在内存中分配给定大小的点。在这种情况下,它保留足够宽的点来保存对象引用 - 而不包含任何其他。
执行时,要执行的第一个语句是:
software.SendKeys ("a")
但问题是,如果你在这里放置一个断点并检查 Locals 工具窗口,你会发现software
对象包含Nothing
。在其他语言中,这被称为" null引用" - 对象变量未设置:有一个用于保存对象引用的保留点,但该点是空的。
您使用New
关键字创建类的实例 - 即创建对象。在VBA对象中,引用分配需要Set
关键字:
Set software = New EXTRA.ExtraScreen
现在,如果您运行该行并检查当地人,您就会发现software
不再是Nothing
了,您可以检查它州/财产。
一旦对象变量拥有适当的对象引用,您就可以合法地调用其成员:
software.SendKeys "a"
你永远不能在Nothing
对象引用上调用任何东西:Nothing
的对象变量是,什么都不是:它不是对象,因此它没有成员可以调用。 VBA运行时通过抛出运行时错误91"对象(或使用块变量)而不是Set"来响应。
"使用块变量" part指的是With
关键字,它也可以包含对象。例如,你可以这样做:
With software
.SendKeys "a"
End With
如果software
不是Set
,您就会得到完全相同的错误。考虑完全删除局部变量,如果它只需要在某个特定过程中作为局部变量存在:
With New EXTRA.ExtraScreen
.SendKeys "a"
End With
在这种情况下,With
块保存对象引用;在End With
,对象消失了(避免跳入With
块,特别是出于这个原因。)