在excel / VBA中使用SAPGUI,为什么更改GuiTableControl的.VerticalScrollbar.Position会破坏对象" connection"?

时间:2016-07-20 23:12:49

标签: excel vba excel-vba sap

首先是我的测试代码

select roomid, door
from table1 t1
where not exists (
    select 1 
    from table2 t2
    where t1.roomid = t2.roomid and 
          t2.date >= '2016-08-20' and 
          t2.date <= '2016-08-21'
    )

此代码将增加表的垂直位置,然后在debug.print行上出现错误&#34;对象不支持此操作&#34;运行时错误445

如果我再添加一行

Sub mytest2()
If Not IsObject(MyApplication) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set MyApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = MyApplication.Children(0)
End If
If Not IsObject(session) Then
   Set session = Connection.Children(0)
End If
If IsObject(Wscript) Then
   Wscript.ConnectObject session, "on"
   Wscript.ConnectObject MyApplication, "on"
End If


Dim MyTableStr As String
Dim MyTable As Variant

MyTableStr = "wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1107/tabsTS_1100/tabpVGUE/ssubSUB_AUFTRAG:SAPLCOVG:3010/tblSAPLCOVGTCTRL_3010"
Set MyTable = session.findById(MyTableStr)
MyTable.VerticalScrollbar.Position = MyTable.VerticalScrollbar.Position + 1
Debug.Print MyTable.VerticalScrollbar.Position & " position"

在.position行和debug.print行之间,它可以正常工作并打印位置。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

我在SAP GUI脚本API pdf中找到了答案 http://www.synactive.com/download/sap%20gui%20scripting/sap%20gui%20scripting%20api.pdf

重要的一段是GuiButton控制的描述。

  

功能按

     

这模拟手动按下按钮。按下按钮将始终导致服务器通信,使对窗口级别以下元素的所有引用无效。因此,以下代码将失败:

Set TextField = session.findById(".../txtF1") 
session.findById(".../btnPB5").press 
TextField.text = "Hello"

这是因为当你执行命令时,有些命令只会影响客户端状态,但是其他命令会导致与服务器的通信,显然当这种情况发生时,所有先前的对象引用都会被破坏。

更改GuiTableControl的.VerticalScrollbar.Position也会导致与服务器的通信。