2012-04-12 7 views
4

Ich bin ein kleines Programm (Makro) in Visual Basic für Applikationen (6.5) schreiben, und ich bin mit dem Standard-Editor, die in Excel integriert ist 2007Fehlermeldungen ohne Zeilennummern

Mein Problem ist, dass ich Fehler angezeigt Nachrichten ohne Zeilennummerninformationen. Ich beziehe mich nicht auf meine Fehlerbehandlung oder benutzerdefinierte Nachrichten.

Beispiel:

German Error Message '1004'

Die Fehlermeldung besagt, dass ich einen Laufzeitfehler haben '1004'. Ich kann nicht auf den 'Debug' Knopf klicken, nur 'Ende' und 'Hilfe' sind verfügbar. So sehe ich nicht, in welcher Zeile der Fehler auftritt. Das ist sehr frustrierend.

Wie kann ich dieses Problem beheben?

+0

Die Fehlermeldung wird übersetzt als "anwendungs- oder objektdefinierter Fehler" –

Antwort

1

Dieser Fehler in einem VBA-Makro weist normalerweise auf einen Missbrauch der Excel-VBA-Funktionen hin. Sie erhalten keine Debug-Informationen, da sie von internem Office-Code ausgegeben werden, auf den der Debugger nicht zugreifen kann.

Die beste Möglichkeit, die fehlgeschlagene Linie zu isolieren, besteht darin, einen Haltepunkt zum oberen Rand des fehlgeschlagenen Makros zu setzen und ihm Zeile für Zeile zu folgen. Möglicherweise finden Sie auch die Zeile Ihres Codes in einem Stack-Trace (obwohl ich nicht weiß, wie viel davon in VBA verfügbar ist).

Wenn Sie wissen, dass dort der Fehler in bestimmten Abschnitt des Codes auftritt, können Sie es zu Ihrer Frage hinzufügen und lassen Sie uns einen Blick darauf werfen.

+0

Danke für deine Antwort .. leider ist der Code sehr groß .. und die Ausführung des Programms dauert sehr lange .. dazu kann ich nicht einstellen break points .. naja .. ich kann Breakpoints setzen, aber während der Ausführung bekomme ich die Meldung, dass die Breakpoints ignoriert werden (oder ich das Programm anhalten kann) .... noch editierst – user1328819

+0

.... meine Abhilfe: ich verwenden Sie viele MsgBoxes, um den Block zu lokalisieren, der den Fehler anhebt. Aber es ist keine sehr nette Lösung .. – user1328819

1

Sie müssen Zeilennummern manuell hinzufügen und Ihre Fehler abfangen. Verwenden Sie in der Falle Erl, um die Zeilennummer zu erhalten. Ich habe Excel nicht auf mir jetzt meine Syntax zu überprüfen, aber Ihr Code soll wie folgt aussehen:

public sub Test() 

on error goto TestError 

10 Dim i as Integer 
20 Dim j as Integer 

30 i = 1 
40 j = 0 

50 debug.Print i/j 

TestExit: 
    exit sub 
TestError: 
    debug.Print Err.Number, Err.Description, Erl 
    goto TestExit 
end sub 
+0

Leitungsnummer ist Erl NICHT Elt –

+2

Danke für Ihre Antwort, aber ich kann nicht glauben, dass ich Zeilennummern von Hand einführen muss. Ich erwarte von einer modernen Programmsprache, dass ich hilfreiche Fehlermeldungen bekomme. – user1328819

+0

@CharlesWilliams danke, redigierte meine Antwort. –

1

Einen Grund für die nicht in der Lage ist Debug-Modus zu gelangen, dass die VBA geschützt ist - VBA-Projekteigenschaften - Projekt zum Betrachten sperren.

+0

danke, aber es ist nicht zur Ansicht gesperrt. – user1328819

0

Sie können Fehlerbehandlungs- "Vorlagen" in MZTools erstellen und sie sehr schnell auf jede Unterfunktion in Ihrem Projekt anwenden. Eine Vorlage wie diese wird Ihnen ein Meldungsfeld geben, wenn ein Fehler aufgetreten ist, Ihnen mitteilen, in welchem ​​Modul/Sub der Fehler ist und der Stop bewirkt, dass der Code bricht, so dass Sie F8 drücken und nach dem einen Code weiterschalten können Das hat den Fehler ausgelöst.

On Error GoTo {PROCEDURE_NAME}_ErrorHandler 

    {PROCEDURE_BODY} 

NormalExit: 
    Exit {PROCEDURE_TYPE} 
{PROCEDURE_NAME}_ErrorHandler: 
    MsgBox "Error " & Err.Number & " (" _ 
    & Err.Description & ") in {PROJECT_NAME}:{MODULE_NAME}:{PROCEDURE_NAME}" 
    Stop 
    Resume Next 
0

Manchmal tritt diese Art von Fehlern im Passwort geschützten Teil des Codes - vor allem innerhalb der Add-In - da VBA kann nicht seine Debug-Cursor dort bewegen. Deshalb gibt es nicht die Zeilennummer.