2016-07-20 9 views
0

Zuerst mein TestcodeMit SAPGUI in Excel/VBA, warum ändert das Ändern der .VerticalScrollbar.Position eines GuiTableControl das Objekt "Verbindung"?

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" 

Dieser Code der Tabellen vertikale Position erhöht und dann auf der debug.print Linie mit Fehlern fehlschlagen Fehlern Laufzeit 445

„Objekt dieser Aktion nicht unterstützt“ Wenn ich noch einmal die Zeile hinzufüge

Zwischen der .position Linie und der debug.print Linie, es funktioniert und die Position wird gedruckt.

Warum passiert das?

Antwort

0

fand ich die Antwort in der Skript-API pdf SAP GUI auf http://www.synactive.com/download/sap%20gui%20scripting/sap%20gui%20scripting%20api.pdf

Die wichtige Stelle in der Beschreibung der Steuer guibutton war.

Funktion drücken

Diese eine Taste manuell emuliert drücken. Das Drücken einer Taste führt immer zur Serverkommunikation, wodurch alle Verweise auf Elemente unterhalb der Fensterebene ungültig werden. Der folgende Code wird daher fehlschlagen:

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

Dies liegt daran, wenn Sie Befehle ausführen, werden einige wirken sie nur auf den Client-Zustand, sondern auch andere Befehle werden die Kommunikation mit dem Server verursachen und offenbar, wenn das passiert, wird alle vorherigen Objektreferenzen sind gebrochen.

Das Ändern der .VerticalScrollbar.Position eines GuiTableControls verursacht auch die Kommunikation mit dem Server.