SAP Jobsuche bei DV-Treff
Skidrow
  • Skidrow
  • SAP Forum - User Thema Starter
vor 7 Jahre
Hallo,

kann mir einer sagen wie ich prüfen kann ob Einträge vorhanden sind?

UserPostedImage 

Ich habe bereits probiert ob ich den Text "Liste enthält keine Daten" auslesen kann. Dies ist sogar möglich, nur gibt es die Tabelle öfter auch ohne diesen text und dann, weiß ich nicht mehr was ich machen soll damit ich weiter komme.

Grüße

ScriptMan
vor 7 Jahre
Hallo Skidrow,

ich kenne keine Eigenschaft, die man abfragen könnte. Daher wieder nur eine Anregung:


 . .
session.findById("wnd[0]").maximize
i = 10
on error resume next
do 
myIcon =  session.findById("wnd[0]/usr/lbl[6," & cstr(i) & "]").IconName
if err.number <> 0 then exit do
i = i + 1
loop
on error goto 0
if i = 10 then
   msgbox "Die Liste scheint leer zu sein."
else 
   msgbox "letzte Ampel (" & myIcon & ") befindet sich in der Zeilenummer: " & cstr(i-1)
end if 
. . .

Grüße,

ScriptMan

Skidrow
  • Skidrow
  • SAP Forum - User Thema Starter
vor 7 Jahre
Du bist scheinbar der einzige der hilft 😞

session.findById("wnd[0]").maximize
i = 10
on error resume next
do 
myIcon =  session.findById("wnd[0]/usr/lbl[6," & cstr(i) & "]").IconName
if err.number <> 0 then exit do
i = i + 1
loop
on error goto 0

Wenn dort nichts steht, bricht er schon mit der Fehlermeldung "control could not be found by id" ab. Danach bricht er den Code ab. Würde er nicht abbrechen sondern danach weiter machen, würde mir das schon reichen.

Grüße und danke!

ScriptMan
vor 7 Jahre
Das Skript zeigt aber genau, in welcher Zeile er den Fehler ermittelt hat. Und mit dieser Zeilennummer ermittelSt du das Kommando, vor das du dann den Befehl

on error resume next

platzieren musst.

Skidrow
  • Skidrow
  • SAP Forum - User Thema Starter
vor 7 Jahre
Habe den Fehler gefunden.... er braucht nur lange um das zu laden, das Script arbeitet aber einfach weiter. Wie kann ich das Script solange pausieren bis er fertig geladen hat?

Grüße

ScriptMan
vor 7 Jahre
Entweder mit einer Zeitvorgabe, die aber nicht stimmen muss.

wscript.sleep 1000 'Es sind 1000 Millisekunden

Oder mit einer Warteschleife, in dem man die Fehlerfreiheit des nachfolgenden Befehles überprüft. Dazu müsste man aber das Skript an der entsprechenden Stelle zu sehen bekommen.

Skidrow
  • Skidrow
  • SAP Forum - User Thema Starter
vor 7 Jahre
Wscript.sleep geht leider nicht. Der Befehl wird zwar nicht als falsch ausgegeben aber er wird anscheinend eifnach ignoriert.

If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.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 application, "on"
End If
dim myIcon
dim myIcon2
dim Zeile
dim Zeile2
Dim Zeile3
Dim ZeileExcel
dim Auftrag
dim x
dim y
Dim AuftragExcel
Zeile =2
Zeile2=2
ZeileExcel=2


Dim ExcelApp, ExcelWB, ExcelWS
	set ExcelApp=createobject("Excel.Application")
	ExcelApp.visible=true
	set ExcelWB=ExcelApp.Workbooks.Open("V:\Users\11398375\Contacts\Auftraege.xlsm")
	set ExcelWS=ExcelWB.Worksheets("WET")


for ZeileExcel = 3 to 100'ExcelApp.Cells(1,8)
	AuftragExcel = ExcelApp.Cells(ZeileExcel,6)
	session.findById("wnd[0]/usr/ctxtAUFNR-LOW").text = AuftragExcel
	session.findById("wnd[0]/tbar[1]/btn[8]").press
	
	session.findById("wnd[0]/usr").verticalScrollbar.position = 100
	session.findById("wnd[0]").maximize
	
	
	yx = left(session.findById("wnd[0]/usr/lbl[2,7]").text,5) '<---- Vor dem Befehl soll gewartet werden. Damit der PC die Zeit hat sich die Daten vom Server zu holen. 
	
	
		i = 8
		on error resume next
		do 
		myIcon =  session.findById("wnd[0]/usr/lbl[3," & cstr(i) & "]").IconName
		if err.number <> 0 then exit do
		'msgbox myIcon & "   Zeilenummer " & i
		i = i + 1
		loop
		on error goto 0
		'msgbox "letzte Ampel (" & myIcon & ") befindet sich in der Zeilenummer: " & cstr(i+1)  'Ausgabe zum Prüfen ob es klappt



		myIcon2 = session.findById("wnd[0]/usr/lbl[3," & cstr(i+1) & "]").IconName
		if myIcon2 = "S_TL_R" then

			y = 7

			x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)

			If x = "22" then
				Auftrag= session.findById("wnd[0]/usr/lbl[24," & Y & "]").text
				ExcelApp.Cells(Zeile,1).Value = Auftrag
			else
				y = y +1
				x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)
				If x = "22" then
					Auftrag= session.findById("wnd[0]/usr/lbl[24," & Y & "]").text
					ExcelApp.Cells(Zeile,1).Value = Auftrag
				else
					y = y +1
					x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)
					If x = "22" then
						x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)
						ExcelApp.Cells(Zeile,1).Value = Auftrag
					end if
				end if
			end if
			
			
			'msgbox x & "  zeile " & y 'nur zum testen
			Zeile = Zeile +1
		end if

		if myIcon2 = "S_TL_G" then

			y = 7

			x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)

			If x = "22" then
				Auftrag= session.findById("wnd[0]/usr/lbl[24," & Y & "]").text
				ExcelApp.Cells(Zeile2,2).Value = Auftrag
			else
				y = y +1
				x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)
				If x = "22" then
					Auftrag= session.findById("wnd[0]/usr/lbl[24," & Y & "]").text
					ExcelApp.Cells(Zeile2,2).Value = Auftrag
				else
					y = y +1
					x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)
					If x = "22" then
						x = left(session.findById("wnd[0]/usr/lbl[24," & Y & "]").text, 2)
						ExcelApp.Cells(Zeile2,2).Value = Auftrag
					end if
				end if
			end if
			
			
			'msgbox x & "  zeile " & y 'nur zum testen
			Zeile2 = Zeile2 +1
		end if
		session.findById("wnd[0]/tbar[0]/btn[15]").press
	
next

Noch zur Info: Mein Code sieht zwar schlimm aus, aber er funktioniert sonst absolut Problemlos und zügig 🙂 Bin absolut kein Profi in dem was ich hier mache. Bitte steinige mich nicht.

Grüße

ScriptMan
vor 7 Jahre
Wenn das Skript läuft, dann ist es egal wie er aussieht!

Mein Vorschlag:


...
session.findById("wnd[0]").maximize

on error resume next
do
 session.findById("wnd[0]/usr/lbl[2,7]").setfocus
 if err.number <> 0 then exit do
 wscript.sleep 1000   
loop	
on error goto 0

yx = left(session.findById("wnd[0]/usr/lbl[2,7]").text,5) '<---- Vor dem Befehl soll gewartet werden. Damit der PC die Zeit hat sich die Daten vom Server zu holen. 
...