Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
952to956
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
952to956
952to956
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Objekt_Error - Ereignis in UserForm

Objekt_Error - Ereignis in UserForm
18.02.2008 13:38:00
Andreas
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!

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 13:50:17
Renee
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

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 13:58:30
Andreas
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.

Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 14:28:10
Nepumuk
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

Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 14:52:11
Andreas
Danke,
nun ja, ich hatte erwartet, dass automatisch im Fehlerfall das Objekt_Error-Ereignis eintritt.
..ist aber nicht so ?

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:03:00
Renee
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

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:05:00
Nepumuk
Hallo Andreas,
schau dir einfach die Hilfe dazu an. Err-Objekt - Methoden.
Gruß
Nepumuk

Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:20:00
Andreas
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.

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:25:00
Nepumuk
Hallo Andreas,
mir ist nich klar, was du unter einem "Objekt_Error-Ereignis" verstehst.
Gruß
Nepumuk

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:36:03
Andreas
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?

Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:54:09
Nepumuk
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

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 16:02:00
Andreas
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.

Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 16:57:00
Renee
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

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 17:05:00
Andreas
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.

Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 17:32:00
Nepumuk
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

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 14:28:29
Fred
Hi,
das ist ein antagonistischer Widerspruch, ein Fehler, den du nicht vorhersen kannst, kann
nicht simuliert werden.
mfg Fred

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 14:24:09
fcs
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


Anzeige
AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:30:00
Andreas
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?

AW: Objekt_Error - Ereignis in UserForm
18.02.2008 15:47:00
fcs
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
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige