首先是我的测试代码
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行之间,它可以正常工作并打印位置。
为什么会这样?
答案 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也会导致与服务器的通信。