如何在VBA中引用特定的外部应用程序窗口(对象)?

时间:2014-05-06 22:01:05

标签: vba ms-access excel-vba access-vba excel

我目前正在Microsoft Access中创建一个应用程序,该应用程序引用了"对于regis图形的反思"图书馆。 基本上,下面的代码将创建一个新的反射实例,它是一个连接到工作中的主机系统的外部telnet应用程序。从那里我可以将vba命令传递给它,这样我就可以在telnet应用程序中自动执行一些步骤。

Dim RIS as object
Set RIS as New Reflection4.session
RIS.visible = True
With RIS
   ...do some stuff
end with

以上工作正常,问题是当我在我的程序中使用其他模块或程序时,我似乎无法让VBA指向已创建的现有对象,如果我有多个打开的话。

例如,我可能已经打开了一个现有的telnet会话,我正在做我的一些常规工作,然后我运行我的VBA应用程序,然后尝试创建自己的会话来工作。下面的VBA代码...... < / p>

Set RIS = GetObject(, "reflection4.session")

...似乎不够聪明,无法弄清楚应该看哪个telnet窗口。从我可以告诉它只是锁定到创建的第一个。这就是为什么我总是必须确保在运行任何自动VBA应用程序之前关闭任何现有的telnet会话,这很痛苦。

上面的getobject命令将[pathname]和[class]作为其两个输入。 所以我到目前为止工作的是pathname = blank和class =&#34; reflection4.session&#34;

有没有办法用指针或名称创建新的Reflection4.session所以我可以稍后引用它们或者以另一种方式使用getobject,这样我就可以找到我真正需要的实际会话,这样我就可以保持其他telnet会话的开放状态打扰他们? 我是否必须遍历某种对象集合并找到最新的对象???

1 个答案:

答案 0 :(得分:0)

如果您只需要查找自己在自己的代码中创建的会话,就可以在自己的收藏中跟踪会话。

'in a module
Global RefSessions as New Collection

'when you're creating
Dim RIS As Reflection4.session
Dim cKey as String

Set RIS as New Reflection4.session
RIS.visible = True
With RIS
   '...do some stuff
End with

cKey = "SomeUniqueIdentifier"
RefSessions.Add RIS, cKey

'when you're using it later, instead of GetObject
Set RIS = RefSessions("SomeUniqueIdentifier")
With RIS
   '...do other stuff
End With

'...or...
Set RIS = RefSessions(2)
With RIS
   '...do other stuff
End With

'...or...
For Each RIS in RefSessions 'loop through every session object added
    With RIS
        '...do other stuff
    End With
Next RIS