Erzwingt ein benutzerdefiniertes Meldungsfeld im Fehlerfall, kann es nicht mit Laufzeitfehlern funktionieren?

893
Lauren

Ich versuche, eine Art "Bibliothek" für Fehler zu erstellen, die auftauchen, damit die Benutzer meiner Tabellenkalkulationen sofort wissen, was schief gelaufen ist. Dies funktioniert gut bei Standardfehlern, aber ich kann nicht dazu führen, dass Laufzeitfehler auftreten. In diesem Fall tritt der Laufzeitfehler 53 auf. Ich denke, da versucht wird, eine temporäre Datei zu löschen, die nicht erfolgreich gespeichert wurde (was in meinem Meldungsfeld angezeigt wird.

Hinweis - Ich versuche nicht, diesen Fehler zu beheben. Ich habe ihn absichtlich ausgelöst, damit die Benutzer wissen, was passiert ist. Ich versuche, das angegebene Meldungsfeld aufzurufen, wenn der Laufzeitfehler 53 auftritt.

Dieses Makro funktioniert also, da es nur ein Standardfehler 1004 ist:

 Sub ReportSaveandEmail() Dim IsCreated As Boolean Dim i As Long Dim PdfFile As String, Title As String Dim OutlApp As Object On Error GoTo Whoa  '-> Sub deleted   Whoa: Dim OutPut As Integer  Select Case Err.Number Case 1004 'Search error' OutPut = MsgBox("Found an error (#1004). This error usually occurs when the macro is searching for a file or folder that doesn't exist. Please check your code.", vbCritical, "File not found") End Select End Sub 

Dieser Fehler, eine Laufzeit, wird jedoch nicht ausgelöst. Ich erhalte nur ein Standard-Excel-Meldungsfeld: "Micosoft Visual Basic | Laufzeitfehler 53 | Datei nicht gefunden"

 Sub ReportSaveandEmail() Dim IsCreated As Boolean Dim i As Long Dim PdfFile As String, Title As String Dim OutlApp As Object On Error GoTo Whoa  '-> Sub deleted   Whoa: Dim OutPut As Integer  Select Case Err.Number Case 53 'Can't find file to delete' OutPut = MsgBox("Found an error (#53). This error usually occurs when the macro tries to delete a temporary file that was not successfully created.", vbCritical, "Temp File not found") End Select  End Sub 

Vielen Dank!

0
Ihr Code wird innerhalb der Laufzeit ausgeführt. Es ist nicht ungewöhnlich, dass Sie keine Sprachkonstrukte zur Behandlung von Laufzeitfehlern verwenden können. Frank Thomas vor 6 Jahren 0
Gibt es überhaupt eine Möglichkeit, mein Meldungsfeld auszulösen, wenn ein Laufzeitfehler erkannt wird? Lauren vor 6 Jahren 0
Nicht generell. Das Meldungsfeld wird von der Laufzeitumgebung erstellt. Wenn es abstürzt, ist es nicht möglich, Code auszuführen, wenn Sie sich in diesem Status befinden. Frank Thomas vor 6 Jahren 0
Ok danke für deine Antwort. Es tritt nur dann auf, wenn ich in diesem Fall einen Fehler 1004 erzwinge, so dass sie hoffentlich wissen, dass sie den 1004 reparieren und nicht die 53 überhaupt kommen lassen. Vielen Dank! Lauren vor 6 Jahren 0

1 Antwort auf die Frage

0
niton

Ihr Code ist unvollständig. Er zeigt nicht, wie Sie den Fehler einstellen.

Das absichtliche Erhöhen des Fehlers 53 scheint ordnungsgemäß zu funktionieren.

Sub ReportSaveandEmail()  On Error GoTo Whoa Err.Raise 1004 Err.Raise 53 Exit Sub  Whoa:  Select Case Err.number Case 1004 'Search error' MsgBox "Found an error (#1004). This error usually occurs when the macro is searching for a file or folder that doesn't exist. Please check your code.", vbCritical, "File not found" Resume Next  Case 53 'Can't find file to delete' MsgBox "Found an error (#53). This error usually occurs when the macro tries to delete a temporary file that was not successfully created.", vbCritical, "Temp File not found" Resume Next  End Select  End Sub 

Sobald Sie 1004 erhöht haben, müssen Sie diese löschen oder fortsetzen, damit 53 eingefangen werden kann.