Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ErrorHandler

ErrorHandler
21.12.2021 12:26:46
chocolino
Hallo zusammen,
ich hab folgendes Problem:
Ich möchte einen SAP Auszug erstellen, dabei können Benutzer jedoch 2 verschiedenen Einstellungen haben.
Der Code unterscheidet sich wie folgt:
'Als Excel XXL exportieren (ohne Zwischensummen)
session.findById("wnd[0]").maximize
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/usr/cmbG_LISTBOX").Key = "08"
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
ODER
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").select
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").setFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
Die beiden Fälle unterscheiden sich also in den ersten 3-4 Zeilen.
Nun möchte ich diesen Fehler gerne abfangen und dachte an einen Errorhandler.
Ist hier "On Error Resume Next" die richtige Wahl? Oder wie könnte man es elegant machen, dass Excel nicht abbricht, sondern diese 3 Zeilen überspringt und dann
den Code weiter ausführt?
Vielen Dank im Voraus!
VG chocolino

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ErrorHandler
21.12.2021 12:44:22
Stefan
Hallo,
on Error resume next führt nur die Zeile nicht aus die aktuell bearbeitet wird. Wenn du mehrere Zeilen überspringen möchtest probiere es mit "on error goto "Textmarke" " und an der Stelle an der du weitermachen möchtest mit deinem Fehlerhandling oder an der Codestelle an der du weitermachen möchtest must du "Textmarke:" schreiben. Bitte lass nur die Anführungszeichen weg und überleg dir sinnvolle Bezeichnungen für die Textmarken.
Viele Grüße
Stefan
AW: ErrorHandler
21.12.2021 12:57:09
chocolino
Hallo Stefan,
danke für deine Antwort.
Ich habe eine "GoTo" Fehlerbehandlung eingebaut, allerdings verstehe ich nicht, wie ich programmiere, dass der Code danach nicht abbricht, sondern weitermacht bzw. bei keinem Fehler die Fehlerbehandlung überspringt:
'Errorhandler da 2 verschiedene Einstellungsmglk des Exports in SAP
On Error GoTo var
'Als Excel XXL exportieren (ohne Zwischensummen)
session.findById("wnd[0]").maximize
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/usr/cmbG_LISTBOX").Key = "08"
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
var:
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
Anzeige
AW: ErrorHandler
21.12.2021 14:21:09
Stefan
Hallo,
eigentlich müsste der an der Stelle deiner Textmarke weitermachen. Nachdem der Error Handler ausgelöst hat sollte man ihn nur zurücksetzen. Dazu am besten deine Sprungmarke in eine if Schleife setzen nach dieser Art (So mach ich das zumindest und hab recht gute Erfolge bisher):
boolIchBinImmerFalse muss als Boolean Definiert sein und ich setze aktiv ihn aktiv auf den Wert False am Anfang meines Programmes.
Wenn du in diesem If drin bist kannst du es verlassen, kommst aber im laufenden Programm niemals rein.
if boolIchBinImmerFalse then
Sprungmarke:
On error goto 0
err.clear
End if
Gleichzeitig setze bitte nach deinem Problematischen Abschnitt die Zeile "on Error goto 0" (Diese Zeile hebt eigene Fehlerroutinen auf)
Ich hoffe das behebt dein Problem, da falls dies nicht der Fall sein sollte, bin ich überfragt, da das bei mir bisher ausgereicht hat.
Anzeige
AW: ErrorHandler
21.12.2021 16:29:21
Yal
oha! Deine Kompetenz in Ehre, Stefan, aber es ist ein seltsame Konstrukt, der nicht unbedingt Schule machen sollte.
Mein Vorschlag, nicht "besser" aber vielleicht leichter zu nachvollziehen:

'Errorhandler da 2 verschiedene Einstellungsmglk des Exports in SAP
On Error GoTo Fall2
'Als Excel XXL exportieren (ohne Zwischensummen)
session.findById("wnd[0]").maximize
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/usr/cmbG_LISTBOX").Key = "08" 'hier passiert ev. ein Fehler
Fall1:
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
GoTo Ende
Fall2:
Resume Next
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
Ende:
VG
Yal
Anzeige
AW: ErrorHandler
21.12.2021 16:45:16
Stefan
Hallo Yal,
das ist nur das was ich mir aus etlichen Foreneinträgen und Supportseiten von Microsoft zum Errorhandling zusammengetragen habe. Ich weiß es sieht nicht toll aus, und ob es so gut funktioniert weiß ich auch nicht.
Deine Lösung sieht auf jeden Fall professioneller aus.
Stefan
Richtig ist alles, was stabil funktioniert ;-)
21.12.2021 17:08:22
Yal
Mein Gedanken war nur, falls unseren Fragesteller jemals sein Code jemand anderen übergeben muss, muss der anderen damit zurecht kommen.
Noch besser wäre (weniger Wiederholung, begrenzter Sprung):

'Als Excel XXL exportieren (ohne Zwischensummen)
Common1:
session.findById("wnd[0]").maximize
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
On Error GoTo OptOut1
session.findById("wnd[1]/usr/cmbG_LISTBOX").Key = "08" 'hier passiert ev. ein Fehler
On Error GoTo 0
session.findById("wnd[1]/tbar[0]/btn[0]").press
GoTo Common2
OptOut1:
Resume Next
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
Common2:
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige