Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Fehlerbehebung mit Visual Basic für Applikationen in Excel für Mac

Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
193247 Error trapping with Visual Basic for Applications in Excel for Mac
Zusammenfassung
Wenn in einem Microsoft Visual Basic für Applikationen-Makro ein Laufzeitfehler auftritt, wird eine Fehlermeldung angezeigt. Das Makro hält entweder an oder zeigt ein unvorhersehbares Verhalten.

Um die Anwendung davon abzuhalten, abzustürzen oder sich unvorhersehbar zu verhalten, können Sie Makrocode einfügen, der den Fehler abfängt und das Makro anweist, wie es diesen zu behandeln hat. Der Vorgang des Abfangens und des Behandelns eines Laufzeitfehlers wird "Fehlerbehebung" (error trapping) genannt. Der Satz von Instruktionen, der der Anwendung sagt, wie ein Fehler zu behandeln ist, wird "Fehlerbehandlungsroutine" oder "Fehlerhandler" genannt.
Weitere Informationen
Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. In diesem Artikel wird vorausgesetzt, dass Sie mit der in den Beispielen verwendeten Programmiersprache und mit den zum Erstellen und Debuggen von Prozeduren verwendeten Tools vertraut sind. Die Spezialisten von Microsoft Support Services können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind. Während Visual Basic-Code ausgeführt wird, können einige Fehler auftreten, die behoben werden können. Sie können die Fehlerbehebung in Microsoft Excel für Mac verwenden, indem Sie die folgenden Funktionen und Anweisungen verwenden.

On Error-Anweisung

Die Anweisung On Error veranlasst Visual Basic für Applikationen dazu, die Fehlerbehebung zu starten oder zu stoppen. Die Anweisung On Error legt auch einen Satz von Anweisungen fest, die ausgeführt werden sollen, wenn ein Fehler auftritt.

Err-Funktion

Die Err-Funktion gibt die Nummer des gefundenen Fehlers zurück.

Beispiel für die Verwendung der Err-Funktion:
   Msgbox "The most recent error number is " & Err & _      ". Its message text is: " & Error(Err)				
Die folgende Tabelle enthält eine Liste der behebbaren Fehlercodes, die auftreten können, wenn Sie die Err-Funktion verwenden (teilweise sinngemäß).
   Fehlercode   Fehlermeldung   ----------   -------------   3            Return ohne GoSub   5            Ungültiger Prozeduraufruf   6            Überlauf   7            Nicht genügend Arbeitsspeicher   9            Index außerhalb des gültigen Bereichs   10           Das Array ist unveränderlich oder vorübergehend gesperrt   11           Division durch Null   13           Datentypen stimmen nicht überein   14           Nicht genügend Zeichenfolgenspeicher   16           Ausdruck zu komplex   17           Angeforderte Operation nicht durchführbar   18           Benutzerbedingter Abbruch   20           Resume ohne Fehler   28           Nicht genügend Stapelspeicher   35           Sub, Function oder Eigenschaft nicht definiert   47           Zu viele Clients für DLL-Anwendung   48           Fehler beim Laden einer DLL   49           Falsche DLL-Aufrufkonvention   51           Interner Fehler   52           Dateiname oder -nummer falsch   53           Datei nicht gefunden   54           Falscher Dateimodus   55           Datei bereits geöffnet   57           Geräte-E/A-Fehler   58           Datei bereits vorhanden   59           Falsche Datensatzlänge   61           Datenträger voll   62           Eingabe nach Zeilenende   63           Falsche Datensatznummer   67           Zu viele Dateien   68           Gerät nicht verfügbar   70           Zugriff verweigert   71           Datenträger nicht bereit   74           Umbenennen bei Angabe unterschiedlicher Laufwerke nicht möglich   75           Fehler beim Zugriff auf Pfad/Datei   76           Pfad nicht gefunden   91           Objektvariable oder With-Blockvariable wurde nicht festgelegt   92           For-Schleife nicht initialisiert   93           Ungültige Musterzeichenfolge   94           Ungültige Verwendung von Null   298          System-DLL konnte nicht geladen werden   320          Zeichengerätenamen in festgelegten Dateinamen können nicht verwendet werden   321          Ungültiges Dateiformat   322          Erforderliche temporäre Datei kann nicht angelegt werden   325          Ungültiges Dateiformat in Ressourcendatei   327          Datenwertname konnte nicht gefunden werden   328          Illegaler Parameter; Arrays können nicht geschrieben werden   335          Zugriff auf Systemregistrierung nicht möglich   336          ActiveX-Komponente nicht korrekt registriert   337          ActiveX-Komponente wurde nicht gefunden   338          ActiveX-Komponente wurde nicht korrekt ausgeführt   360          Objekt bereits geladen   361          Objekt kann weder ge- noch entladen werden   363          Festgelegtes ActiveX-Steuerelement wurde nicht gefunden   364          Objekt wurde entladen   365          Entladen in diesem Kontext nicht möglich   368          Die festgelegte Datei ist abgelaufen. Dieses Programm benötigt eine neuere Version.   371          Das angegebene Objekt kann nicht als umgebendes Formular für Show verwendet werden.   380          Ungültiger Eigenschaftenwert   381          Ungültiger Eigenschaftenarrayindex   382          Eigenschaftensatz kann zur Laufzeit nicht ausgeführt werden   383          Eigenschaftensatz kann nicht mit Eigenschaft "Schreibgeschützt" ausgeführt werden   385          Eigenschaftenarrayindex wird benötigt   387          Eigenschaftensatz nicht erlaubt   393          Property Get kann zur Laufzeit nicht ausgeführt werden   394          Property Get kann nicht mit Eigenschaft "Nur Lesezugriff" ausgeführt werden   400          Formular wird bereits angezeigt und kann daher nicht gebunden dargestellt werden   402          Der Code muss höchstes gebundene Formular zuerst schließen   419          Zugriff auf dieses Objekt verweigert   422          Eigenschaft nicht gefunden   423          Eigenschaft oder Methode nicht gefunden   424          Objekt erforderlich   425          Ungültige Objektverwendung   429          ActiveX-Komponente kann Objekt nicht erstellen oder Referenz zu diesem Objekt zurückgeben   430          Klasse unterstützt keine OLE-Automatisierung   430          Klasse unterstützt keine Automatisierung   432          Datei- oder Klassenname während Automatisierungsoperation nicht gefunden   438          Objekt unterstützt diese Eigenschaft oder Methode nicht   440          OLE-Automatisierungsfehler   440          Automatisierungsfehler   442          Verbindung zur Klassen- oder Objektbibliothek für den Remoteprozess nicht mehr verfügbar   443          Automatisierungsobjekt hat keinen Standardwert   445          Objekt unterstützt diese Aktion nicht   446          Objekt unterstützt keine benannten Argumente   447          Objekt unterstützt die aktuellen lokalen Einstellungen nicht   448          Benanntes Argument nicht gefunden   449          Argument ist nicht optional oder ungültige Eigenschaftzuweisung   450          Falsche Anzahl an Argumenten oder ungültige Eigenschaftszuweisung   451          Objekt ist keine Auflistung   452          Ungültiger Ordinalwert   453          Angegebene DLL-Funktion nicht gefunden   454          Coderessource nicht gefunden   455          Fehler durch gesperrte Coderessource   457          Dieser Schlüssel ist bereits einem Element dieser Auflistung zugeordnet   458          Variable verwendet in Visual Basic nicht verwendeten Typ   459          Komponente unterstützt keine Ereignisse   460          Zwischenablageformat ungültig   461          Angegebenes Format passt nicht zum Datenformat   480          AutoRedraw-Bild kann nicht erstellt werden   481          Ungültiges Bild   482          Druckerfehler   483          Angegebene Eigenschaft wird vom Drucker nicht unterstützt   484          Druckerinformationen können nicht vom System abgerufen werden. Stellen Sie sicher, dass der Drucker richtig installiert ist.   485          Unzulässiger Bildtyp   486          Formular kann auf diesem Druckertyp nicht ausgedruckt werden   735          Datei kann nicht in Temp-Verzeichnis gespeichert werden   744          Suchtext nicht gefunden   746          Ersetzungen zu lang   31001        Nicht genügend Arbeitsspeicher   31004        Kein Objekt   31018        Klasse wurde nicht festgelegt   31027        Objekt kann nicht aktiviert werden   31032        Eingebettetes Objekt kann nicht erstellt werden   31036        Fehler beim Speichern einer Datei   31037        Fehler beim Laden einer Datei 				

Error-Funktion

Die Error-Funktion gibt eine Fehlermeldung zurück, die zu einer bestimmten Fehlernummer gehört.

Beispiel für die Verwendung der Error-Funktion:
   Msgbox "The message text of the error is: " & Error(Err)				

Error-Anweisung

Die Error-Anweisung simuliert das Auftreten eines Fehlers und ermöglicht es Ihnen dadurch, der Err-Funktion eine benutzerdefinierte Fehlernummer zuzuordnen. Diese benutzerdefinierten Fehlerwerte sind Werte, die Sie für Ihre Prozeduren festlegen. Diese werden immer in den Variablen des Datentyps Variant gespeichert. Eine häufige Anwendung dieser Art von Fehlerwerten sind Prozeduren, die mehrere Argumente akzeptieren und einen Wert zurückgeben. Nehmen Sie beispielsweise an, dass der zurückgegebene Wert nur gültig ist, wenn die Argumente in einen bestimmten Bereich fallen. Ihre Prozedur kann die vom Benutzer angegebenen Argumente testen. Wenn diese Argumente nicht im akzeptablen Bereich liegen, kann die Prozedur den entsprechenden Fehlerwert zurückgeben.

Error ist ein Untertyp des Datentyps Variant. Wenn der Begriff "Fehlerwert" zurückgegeben wird, bedeutet dies normalerweise, dass eine Variable vom Typ Variant ist und diese einen Wert enthält, den Visual Basic für Applikationen als einen benutzerdefinierten Fehler erkennt. Fehlerwerte werden in einer Prozedur dazu verwendet, anzuzeigen, dass Fehlerbedingungen aufgetreten sind. Anders als normale Laufzeitfehler unterbrechen diese Fehler Ihren Code nicht, da sie als normale Variablen erkannt werden, nicht als Fehler. Ihre Prozeduren können auf diese Fehlerwerte hin prüfen und die entsprechenden korrigierenden Maßnahmen durchführen.

Sie können auch die Error-Anweisung verwenden, um Laufzeitfehler zu simulieren. Dies ist besonders hilfreich, wenn Sie Ihre Anwendungen testen, oder wenn Sie eine bestimmte Bedingung als gleichwertig zu einem Laufzeitfehler behandeln möchten. Jeder Laufzeitfehler für Visual Basic für Applikationen kann simuliert werden, indem der Fehlercode für den Fehler in einer Error-Anweisung bereitgestellt wird. Sie können die Error-Anweisung auch dazu verwenden, Ihre eigenen benutzerdefinierten Fehlermeldungen zu erstellen. Stellen Sie hierfür einen Fehlercode bereit, der nicht mit einem Laufzeitfehler für Visual Basic für Applikationen identisch ist. Die Tabelle mit einer Liste der eingebauten Fehler finden Sie weiter oben in diesem Artikel (im Abschnitt "Err-Funktion"). Zum momentanen Zeitpunkt verwendet Visual Basic für Applikationen nicht alle der verfügbaren Nummern für eingebaute Fehler. In zukünftigen Veröffentlichungen von Visual Basic für Applikationen wird sich die Anzahl der internen Nummern erhöhen, da mehr eingebaute Fehler hinzugefügt werden. Es wird empfohlen, dass Sie mit Ihren Fehlernummern bei 50.000 starten und mit Fehlernummern bis 65.535 arbeiten, um mögliche Konflikte in der Zukunft zu vermeiden.

Beispiel für die Verwendung einer Error-Anweisung, um Laufzeitfehler zu verursachen:
   Sub Test()      On Error Resume Next      Error 50000          'set the value of Err to 50000      If Err = 50000 Then         MsgBox "my own error occurred"      End If   End Sub				
Wenn das Testmakro ausgeführt wird, wird Ihnen ein Nachrichtenfeld angezeigt, das den Text "Mein eigener Fehler ist aufgetreten" enthält.

CVErr-Funktion

Die Funktion CVErr wird dazu verwendet, Fehlerwerte zu erstellen. Die CVErr-Funktion nimmt ein Argument, das entweder eine ganze Zahl oder eine Variable sein muss, die eine ganze Zahl enthält.
   NoRadius = CVErr(2010)   NotANumber = 2020   InvalidArgument = CVErr(NotANumber)				
Beispiel für die Verwendung der CVErr-Funktion
   Public NoRadius, NotANumber   Sub AreaOfCircle()      Const PI = 3.142      NoRadius = CVErr(2010)      NotANumber = CVErr(2020)      Radius = CheckData(InputBox("Enter the radius: "))      If IsError(Radius) Then         Select Case Radius            Case NoRadius               MsgBox "Error: No radius given."            Case NotANumber               MsgBox "Error: Radius is not a number."            Case Else               MsgBox "Unknown Error."         End Select      Else         MsgBox "The area of the circle is " & (PI * Radius ^ 2)      End If   End Sub   Function CheckData(TheRadius)      If Not IsNumeric(TheRadius) Then         CheckData = NotANumber      ElseIf TheRadius = 0 Then         CheckData = NoRadius      Else         CheckData = TheRadius      End If   End Function				

Verwenden von eingebauten Fehlerwerten

Es sind sieben eingebaute Fehler in Excel für Mac verfügbar. Die untenstehende Tabelle zeigt die Fehlernummer (Konstante), den wörtlichen Fehlerwert und den konvertierten Fehlerwert.
Fehlernummer (Konstante)    Wörtlicher Fehlerwert    Konv. FehlerwertxlErrDiv0                   [#DIV/0!]               CVErr(xlErrDiv0)xlErrNA                     [#N/A]                  CVErr(xlErrNA)xlErrName                   [#NAME?]                CVErr(xlErrName)xlErrNull                   [#NULL!]                CVErr(xlErrNull)xlErrNum                    [#NUM!]                 CVErr(xlErrNum)xlErrRef                    [#REF!]                 CVErr(xlErrRef)xlErrValue                  [#VALUE!]               CVErr(xlErrValue)				
Sie arbeiten mit diesen eingebauten Arbeitsblattfehlerwerten in der gleichen Weise, wie Sie mit den benutzerdefinierten Fehlern arbeiten; als Zahlen, die mithilfe der CVErr-Funktion in Fehlerwerte konvertiert werden. Der einzige Unterschied besteht darin, dass Visual Basic für Applikationen die Fehlernummern für Arbeitsblattfehler als eingebaute Konstanten und auch die wörtlichen Fehlerwerte bereitstellt. Diese Elemente werden nicht für benutzerdefinierte Fehlerwerte bereitgestellt. Die wörtlichen Fehlerwerte müssen, wie in obenstehender Tabelle, in eckige Klammern gesetzt werden.

Beispiel für die Verwendung von eingebauten Fehlerwerten:
   Function Commission(SharesSold,PricePerShare)      If Not (IsNumeric(SharesSold) And IsNumeric(PricePerShare)) Then         Commission = CVErr(xlErrNum)      Else         TotalSalePrice = ShareSold * PricePerShare         If TotalSalePrice <= 15000 Then            Commission = 25 + 0.03 * SharesSold         Else            Commission = 25 + 0.03 * (0.9 * SharesSold)         End If      End If   End Function				

Zentralisieren des Codes zur Fehlerbehebung

Wenn Sie Code zur Fehlerbehebung zu Ihren Makros für Visual Basic für Applikationen hinzufügen, werden Sie feststellen, dass die Fehler immer wieder behandelt werden. Sie können die Größe Ihres Codes und den zum Schreiben benötigten Aufwand reduzieren. Schreiben Sie hierzu einige Prozeduren, die Ihr Code zur Fehlerbehebung aufrufen kann, um die häufigen Fehlersituationen zu behandeln.

Nachfolgend sehen Sie ein Beispiel für eine Funktionsprozedur, die eine dem Fehler entsprechende Nachricht anzeigt. Wenn möglich, ermöglicht sie dem Benutzer, festzulegen, welche Aktion durch Klicken einer bestimmten Schaltfläche ausgeführt werden soll. Dann gibt sie die Codenummer der aufrufenden Prozedur zurück.
   Public Const RESUME_STATEMENT = 0   'Resume   Public Const RESUME_NEXT = 1        'Resume Next   Public Const UNRECOVERABLE = 2      'Unrecoverable error   Public Const UNRECOGNIZED = 3       'Unrecognized error   Public Const ERR_DEVICEUNAVAILABLE = 68   Public Const ERR_BADFILENAMEORNUMBER = 52   Public Const ERR_PATHDOESNOTEXIST = 76   Public Const ERR_BADFILEMODE = 54   Function FileErrors(errVal As Integer) As Integer   Dim MsgType As Integer, Msg As String, Response As Integer      MsgType = vbExalamation      Select Case errVal         Case ERR_DEVICEUNAVAILABLE     'Error #68            Msg = "That device is unavailable."            MsgType = MsgType + vbAbortRetryIgnore         Case BADFILENAMEORNUMBER      'Errors #64 & 52            Msg = "That filename is not valid."            MsgType = MsgType + vbOKCancel         Case PATHDOESNOTEXIST      'Error #76            Msg = "That path does not exist."            MsgType = MsgType + vbOKCancel         Case BADFILEMODE      'Error #54            Msg = "Can not open the file for that type of access."            MsgType = MsgType + vbOKCancel         Case Else            FileErrors = UNRECOGNIZED            Exit Function      End Select      Response = MsgBox(Msg, MsgType, "Disk Error")      Select Case Response         Case vbOK, vbRetry            FileErrors = RESUME_STATEMENT         Case vbIgnore            FileErrors = RESUME_NEXT         Case vbCancel, vbAbort            FileErrors = UNRECOVERABLE         Case Else            FileErrors = UNRECOGNIZED      End Select   End Function				

Behandlung von benutzerbedingten Abbrüchen

Der Benutzer kann eine Prozedur von Visual Basic für Applikationen abbrechen, indem er [BEFEHLSTASTE]+[.] (PUNKT) drückt. Es ist möglich, das Unterbrechen für Prozeduren in Ihren fertigen Anwendungen zu deaktivieren. Wenn Sie aber Unterbrechungen in der fertigen Anwendung nicht deaktivieren, können Sie sicherstellen, dass die Prozedur benachrichtigt wird, wenn eine Unterbrechung eingetreten ist. Dadurch kann sie Dateien schließen, die Verbindung zu freigegebenen Ressourcen trennen oder veränderte Variablen wiederherstellen, bevor dem Benutzer die Kontrolle über die Anwendung zurückgegeben wird.

Sie können benutzerbedingte Abbrüche in Ihren Prozeduren beheben, indem Sie xlErrorHandler die Eigenschaft EnableCancelKey zuordnen. Wenn diese Eigenschaft gesetzt ist, produzieren alle Unterbrechungen einen Laufzeitfehler 18, der mithilfe der Anweisung On Error behoben werden kann. Sie können den Fehler so behandeln, dass die Prozedur angehalten und das Programm beendet wird. Wenn die Resume-Anweisung verwendet wird, um die Prozedur nach dem Beheben eines Laufzeitfehlers weiter auszuführen, wird die Unterbrechung ignoriert.

Es ist auch möglich, benutzerbedingte Abbrüche komplett zu ignorieren, indem die Eigenschaft EnableCancelKey auf xlDisabled gesetzt wird. In diesem Fall ignoriert Excel für Mac alle Versuche des Benutzers, die ausgeführte Prozedur zu unterbrechen. Ändern Sie die Eigenschaft EnableCancelKey in xlInterrupt, um die Standardverarbeitung eines Abbruchs wiederherzustellen. Um eine Prozedur davon abzuhalten, Benutzerabbrüche dauerhaft zu deaktivieren, stellt Excel für Mac jedes Mal die Standardeinstellung der Eigenschaft EnableCancelKey auf xlInterrupt wieder her, wenn die Prozedur abgeschlossen wurde. Um sicherzustellen, dass Unterbrechungen innerhalb Ihres Codes korrekt behandelt werden, müssen Sie diese bei jeder Ausführung der Prozedur explizit aktivieren oder beheben. Beachten Sie, dass für jede Prozedur nur ein Unterbrechungs-Handler verwendet werden kann. Für alle Laufzeitfehler, die von der Prozedur erkannt werden, wird der gleiche Handler verwendet.

Das folgende Beispiel stellt eine Prozedur dar, die zum Abschluss lange Zeit benötigt. Wenn ein Benutzer die Prozedur unterbricht, wird ein Fehler behoben. Der benutzerbedingte Abbruch bestätigt zunächst, dass die Prozedur tatsächlich angehalten werden soll, um dann die Prozedur in geordneter Weise zu beenden.
   Sub ProcessData()      'Set up a user interrupt trapping as a run-time error      On Error GoTo UserInterrupt      Application.EnableCancelKey = xlErrorHandler      'Start a long duration task      For x = 1 to 1000000         For y = 1 to 10         Next y      Next x      Exit Sub   UserInterrupt:      If Err = 18 Then         If MsgBox ("Stop processing records?", vbYesNo) = vbNo Then            'Continue running at the point procedure was interrupted            Resume         Else            'Handle other errors that occur            MsgBox Error(Err)         End If      End If   End Sub				
Wenn Sie das Makro ProcessData ausführen, und Sie schnell [STRG]+[PAUSE] drücken, werden Sie in einer Nachricht gefragt, ob die Verarbeitung der Datensätze abgebrochen werden soll. Wenn Sie auf Ja klicken, wird eine weitere Nachricht mit "Benutzerbedingter Abbruch eingetreten" angezeigt. Wenn Sie in diesem Nachrichtenfeld auf OK klicken, wird das Makro beendet. Wenn Sie in diesem Nachrichtenfeld auf Nein klicken, wird das Makro fortgesetzt.

Resume-Anweisung

Die Resume-Anweisung nimmt die Codeverarbeitung wieder auf, nachdem die Fehlerbehebungsroutine abgeschlossen wurde.
XL98 XL2001 XL2004 XLX
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Eigenschaften

Artikelnummer: 193247 – Letzte Überarbeitung: 05/07/2007 17:04:34 – Revision: 5.3

  • Microsoft Excel 2004 for Mac
  • Microsoft Excel X für Macintosh
  • Microsoft Excel 2001 für Mac
  • Microsoft Excel 98 für Macintosh
  • kbdtacode kbhowto KB193247
Feedback