Excel VBA mehrere Fehler-handling in der gleichen Prozedur

Habe ich vorher verwendet, Fehlerbehandlung in VBA-erfolgreich, aber wenn man versucht, mehrere Fehlerbehandlung Blöcke ich kann nicht herausfinden, wie es zu tun.

Den code, den ich geschrieben habe sieht wie folgt aus:

...

  On Error GoTo ErrorHandler1
  shpArrow1.Left = shpLine.Left + shpLine.Width * Min(Sqr(Calculations.Range("cVolProduct").value / Calculations.Range("cVolRefIndices").value), 2) / 2 - shpArrow1.Width / 2
  shpTag1.Left = shpLine.Left + shpLine.Width * Min(Sqr(Calculations.Range("cVolProduct").value / Calculations.Range("cVolRefIndices").value), 2) / 2 - shpTag1.Width / 2
  shpArrow2.Left = shpLine.Left + shpLine.Width * Min(Sqr(Calculations.Range("cVolUnderlyings").value / Calculations.Range("cVolRefIndices").value), 2) / 2 - shpArrow2.Width / 2
  shpTag2.Left = shpLine.Left + shpLine.Width * Min(Sqr(Calculations.Range("cVolUnderlyings").value / Calculations.Range("cVolRefIndices").value), 2) / 2 - shpTag2.Width / 2
  shpIndexLine.Left = shpLine.Left + shpLine.Width / 2 - shpIndexLine.Width / 2
  GoTo NoError1
ErrorHandler1:
  shpArrow1.Left = shpLine.Left - shpArrow1.Width / 2
  shpTag1.Left = shpLine.Left - shpTag1.Width / 2
  shpArrow2.Left = shpLine.Left - shpArrow2.Width / 2
  shpTag2.Left = shpLine.Left - shpTag2.Width / 2
  shpIndexLine.Left = shpLine.Left + shpLine.Width / 2 - shpIndexLine.Width / 2
  errorRelativeRisk = 1
NoError1:
  On Error GoTo 0

  On Error GoTo ErrorHandler2
  Output.ChartObjects("ChartHistoryUnderlyings").Activate
  ActiveChart.Axes(xlValue).CrossesAt = ActiveChart.Axes(xlValue).MinimumScale
  ActiveChart.Axes(xlCategory).CrossesAt = ActiveChart.Axes(xlCategory).MinimumScale
  GoTo NoError2
ErrorHandler2:
  errorHistUnderl = 1
NoError2:
  On Error GoTo 0

...

Zweiten Fehlerbehandlung-block funktioniert nicht. Ich vermute, dass ich nicht beenden Sie den ersten Fehler-handling-block richtig. Habe versucht, eine Antwort zu finden, das funktioniert für mich, aber ohne Erfolg.

Dankbar für jede Hilfe!!!

  • Tun die ... stehen für Private Sub DoSomething() und End Sub beziehungsweise, oder es steckt mehr dahinter? Ich denke, dein code könnte einfacher sein, zu Folgen, wenn Sie extrahiert die Methode aus jedem "block", jeder mit seinen eigenen Fehlerbehandlung; im Grunde müssen Sie zu entwirren, das GoTo Mess.
  • Ja die ... steht für Beginn und Ende der sub, aber es gibt einige einfachen Berechnungen, die sollten nicht auf die Fehlerbehandlung. Im Grunde beide die Fehlerbehandlung Blöcke funktioniert, wenn ich nur einen davon benutzen, aber beide vielleicht habe ich zu "verstecken" Sie den code, indem Sie zwei kurze U-Boote statt.
InformationsquelleAutor David | 2015-11-23
Schreibe einen Kommentar