Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Objekt_Error - Ereignis in UserForm

Betrifft: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 13:38:58

Hallo VBA-Gemeinde,
folgendes Problem:
Ich habe ein UserForm erstellt und mit viel Beiwerk zum Leben erweckt. Vereinzelt habe ich auch mit On Error Resume Next und GoTo 0 Fehlerroutinen eingefügt.

Nun bin ich gewillt, Fehler, welche dennoch auftreten können, sauber abzufangen, da es sich um ein Serverprojekt mit Mehrfachzugriff handelt.

Also habe ich mich mit dem Objekt_Error-Ereignis befasst und eine entsprechende Routine in einem Modul untergebracht, welche bei dem Error-Ereignis des betreffenden Form-Objekts aufgerufen werden soll.

Wie kann ich nun einen Test durchführen, um zu checken, ob tatsächlich die Geschichte so funzt wie gewollt.
'Err.Raise....' funzt nicht!

  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Renee
Geschrieben am: 18.02.2008 13:50:17

Hi Andreas,

Wenn ich dich richtig verstehe willst du einfach einen Fehler provozieren
Also z.B.

Msgbox 10/0


oder doch nicht ?

GreetZ Renée


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 13:58:30

Hi Renée,
jetzt zum Test ja.
Ich möchte quasi, wenn bei einem Steuerelement des UserForm ein Fehler zur Laufzeit auftritt, den ich nicht vorhergesehen habe, dass dieser durch eine Routine im Error-Ereignis des entsprechenden Steuerelements abgefangen wird.

Diese Eventualität soll im Vorfeld getestet werden.

Und da hatte ich halt an err.raise gedacht, funzt halt nicht.


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Nepumuk
Geschrieben am: 18.02.2008 14:28:10

Hallo Andreas,

was soll da nicht gehen? Fehler kannst du so produzieren:

Public Sub test1()
    Error (10)
End Sub

Public Sub test2()
    Err.Raise Number:=vbObjectError, Description:="Mein Fehler"
End Sub

Der erste ist ein produzierter excelinterner Fehler mit dem, der entsprechenden Nummer verbundenen Fehlertext, der zweite ein selbst produzierter mit frei wählbarer Nummer und Text.

Gruß
Nepumuk


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 14:52:11

Danke,
nun ja, ich hatte erwartet, dass automatisch im Fehlerfall das Objekt_Error-Ereignis eintritt.

..ist aber nicht so ???


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Renee
Geschrieben am: 18.02.2008 15:03:54

Hi Andreas,

Also habe ich mich mit dem Objekt_Error-Ereignis befasst und eine entsprechende Routine in einem Modul untergebracht, welche bei dem Error-Ereignis des betreffenden Form-Objekts aufgerufen werden soll.
Dann zeig uns doch mal, wie du das bewerkstelligt hast.

automatisch im Fehlerfall das Objekt_Error-Ereignis
Was heisst automatisch ? On Error goto ? oder was...

GreetZ Renée


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Nepumuk
Geschrieben am: 18.02.2008 15:05:23

Hallo Andreas,

schau dir einfach die Hilfe dazu an. Err-Objekt - Methoden.

Gruß
Nepumuk


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 15:20:20

Hm..., da muss ich mal die Frage stellen: Wozu benötige ich ein Objekt_Error-Ereignis, wenn es nicht ausgelöst werden kann? Oder, wann tritt denn dieses ein? Das ist in keiner Hilfe in verständlicher Form beschrieben.

Nur mal so:
Wenn sich ein Wert einer Textbox ändert und eine Change-Ereignis-Prozedur für diese existiert, gibt es doch auch eine Reaktion von VBA, die ich im Test vorab kontrollieren kann.


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Nepumuk
Geschrieben am: 18.02.2008 15:25:52

Hallo Andreas,

mir ist nich klar, was du unter einem "Objekt_Error-Ereignis" verstehst.

Gruß
Nepumuk


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 15:36:03

Ich meine, es gibt in VBA im UserForm-Code Objekte und jeweils Prozeduren dazu. Zu fast jeder Objektart (z.B. TextBox) gibt es eine von VBA mitgebrachte TextBox_Error Prozedur als Ereignis dazu. Wann tritt diese denn nun ein? Ein Change-Ereignis tritt ein, wenn der Wert der Box sich ändert.
Und ein Error-Ereignis???


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Nepumuk
Geschrieben am: 18.02.2008 15:54:09

Hallo Andreas,

es gibt kein "TextBox_Error" - Ereignis. Wenn du z.B. eine falsche Methode auf ein Textbox-Objekt anwendest, dann wird das Err-Objekt mit den verfügbaren Daten (Nummer, Beschreibung, Kontext ...) gefüllt. Hast du in der Prozedur eine Fehlerbehandlungroutine dann wird diese nach Anweisung durchlaufen.

Gruß
Nepumuk


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 16:02:26

Nehmen wir an, meine Textbox im Formular heißt 'TextBox1', dann stellt VBA im Formularcode eine Ereignisroutine (Sub) TextBox1_Error(...) zur Verfügung. Nun frage ich: Welchen Sinn hat diese Prozedur? - Das habe ich leider noch nicht verstanden.


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Renee
Geschrieben am: 18.02.2008 16:57:25

Hi Andreas,

IMHO werden diese Error-Events nur angesprochen, wenn im internen Code des Controls eine Fehler auftritt. Aus der (englischen) Hilfe:
The code written for the Error event determines how the control responds to the error condition.

The ability to handle error conditions varies from one application to another. The Error event is initiated when an error occurs that the application is not equipped to handle
.

Fehler die im VBA Code auftreten können, müssen über eine On Error Goto Anweisung abgefangen werden.

GreetZ Renée


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 17:05:17

Renée,
vielen Dank!
Hatte beim erneuten Durchlesen der deutschsprachigen Erklärung für das Ereignis auch so etwas vermutet.

Wenn Excel/VBA den Fehler einem Code (#) nicht zuordnen kann, wird diese Prozedur ausgeführt.


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Nepumuk
Geschrieben am: 18.02.2008 17:32:12

Hallo Andreas,

entschuldige, dass ich ein bisschen ungenau war, und auch nicht nach dem Error-Ereignis gesehen habe. Hab mich parallel 2 Stunden lang mit WMI rumgeärgert.

Gruß
Nepumuk


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Fred
Geschrieben am: 18.02.2008 14:28:29

Hi,

das ist ein antagonistischer Widerspruch, ein Fehler, den du nicht vorhersen kannst, kann
nicht simuliert werden.

mfg Fred


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: fcs
Geschrieben am: 18.02.2008 14:24:09

Hallo Andreas,

bei mir sieht eine aufwendige Fehlerbehandlung beispielhaft etwa wie folgt aus. Dabei wird immer der Fehler in einer MsgBox angezeigt. Danach folgt dann die Fehlerauswertung via Select Case mit Code, der entweder den Fehler bereinigt, z.B. durch Usereingaben oder sonstige Anweisungen, oder gezielt eine als Private bzw. Public deklarierte Variable setzt, die dann ggf. in weiteren Prozeduren ausgewertet werden kann.

Zusätzlich setze ich ich an kritischen Stellen im Code eine Variable, so dass ich weiss/prüfen kann, in welchem Abschnitt einer Prozedur der Fehler aufgetreten ist.

Zum Testen der Fehlerroutinen: bewußt den Fehler einbauen (z.B. falsche Blattnamen, Variablentypen etc.), der geprüft werden soll.

Mit "On Error Resume Next" sollte man meiner Meinung nach sehr sparsam umgehen, da man nicht nachvollziehen kann (ausser bei schrittweiser Ausführung) wo ein Fehler auftritt und es gibt ggf. nur noch eine chaotisches Ergebnis. Besser ist es im Code an kritischen Stellen entsprechende Prüfungen auf korrekte Input-Daten einzubauen.

Gruß
Franz


Private boFehler as Boolean
Sub aatest()
  'Variablendeklarationen etc
  Dim Fehler As Integer, wks As Worksheet
  On Error GoTo Fehlerbehandlung
  Fehler = 1
  'Code Teil 1
    set wks = Worksheets("Tabelle21")
  Fehler = 2
  'Code Teil 2
  
  Fehler = 3
  'Code Teil 2
  
  GoTo Ende
Fehlerbehandlung:
  MsgBox "Fehler-Nr.: " & Err.Number & " ist aufgetreten!" & vbLf & vbLf & Err.Description
  Select Case Err.Number
    Case 1014
      'Anweisungen zur Bereinigung des Fehlers
        boFehler = True
    Case Else
      Select Case Fehler
        Case 1
          'Code zur Bereinigung des Fehlers
          
          Resume 'Prozedur wird in der Zeile mit dem Fehler fortgesetzt
        Case 2
          'Code zur Bereinigung des Fehlers
          
          Resume 'Prozedur wird in der Zeile mit dem Fehler fortgesetzt
        Case 3
          MsgBox "Nach Zeile Fehler = 3 ist der Fehler aufgetreten. Makro wird beendet!"
          boFehler = True
          GoTo Ende
    End Select
  End Select
Ende:
  'Code, der beim Verlasen der Routine immer ausgeführt werden soll
  Set wks = Nothing
  Application.ScreenUpdating = True
End Sub




  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: Andreas Zahn
Geschrieben am: 18.02.2008 15:30:16

Danke Franz,
wenn ich dich richtig verstanden habe, muss jede komplexere Prozedur diese Routine erhalten? Oder wie bringe ich VBA dazu, das diese Fehlerbehandlung bei einem nicht vorhersehbaren fehler in Anspruch genommen wird?


  

Betrifft: AW: Objekt_Error - Ereignis in UserForm von: fcs
Geschrieben am: 18.02.2008 15:47:33

Hallo Andreas,

eine Fehlerbehandlung ist immer dann sinnvoll, wenn durch Benutzereingaben oder aus anderen Gründen ein Makro in einen Fehler laufen kann.

Die von mir beschriebene Vorgehensweise erlaubt eine sehr kontrollierte Behandlung und Anzeige von Fehlern und ein kontrolliertes Beenden von Prozeduren ohne das Excel nach Beenden des Makros oder Einschalten des Debug-Modus fragt.

Die "nicht vorhersehbaren" Fehler (außer Excel-Totalaussetzer) werden zumindest mit einer Meldung angezeigt und man kann ggf. noch eingreifen bzw. kontrolliert das Makro beenden.

Gruß
Franz


 

Beiträge aus den Excel-Beispielen zum Thema "Objekt_Error - Ereignis in UserForm"