Syntax-Fehler, logische Fehler, Laufzeitfehler, Datentyp-Probleme

Logische Fehler

∅ 1.7 / 6 Bewertungen

Logische Fehler

Auf dieser Seite

Logische Fehler bemerken Sie eigentlich nur anhand unerwarteter Ergebnisse des Programms. Aus Computer-Sicht ist nämlich alles in bester Ordnung. Ihr Programm macht exakt, was Sie geschrieben haben. Das ist nur nicht das, was Sie gemeint haben.

Betrachten Sie beispielsweise den folgenden Code, mit dem die ersten drei Einträge einer Collection gelöscht werden sollen (falls Sie bisher noch nicht mit Collections gearbeitet haben: das sind automatisch verwaltete Sammlungen gleichartiger Objekte. Die Aufzählungsobjekte wie Worksheets, Documents, QueryDefs etc. sind alle intern Collections):

Sub InCollectionFalschLoeschen()
    Dim colDaten As New Collection
    Dim i As Integer
    
    colDaten.Add "a"
    colDaten.Add "b"
    colDaten.Add "c"
    colDaten.Add "d"
    colDaten.Add "e"
    colDaten.Add "f"
    colDaten.Add "g"
    
    For i = 1 To 3
        colDaten.Remove i
    Next
    Debug.Print colDaten(1)
    Debug.Print colDaten(2)
    Debug.Print colDaten(3)
End Sub

Wie Sie im Direktfenster (Strg+G zum Anzeigen) kontrollieren können, sind keineswegs die ersten drei Einträge gelöscht, sondern diejenigen mit Indexnummer 1 ("a"), 3 ("c") und 5 ("e").

Das ist aber völlig korrekt, denn nach dem Löschen des ersten Eintrags rückt der ehemals zweite auf Position 1. Wenn Sie also jetzt im zweiten Schleifendurchlauf den jetzt zweiten Collection-Eintrag löschen, war dieser ursprünglich an Position 3.

Das folgende Listing zeigt, was Sie tatsächlich programmieren müssten:

Sub InCollectionRichtigLoeschen()
    Dim colDaten As New Collection
    Dim i As Integer
    
    colDaten.Add "a"
    colDaten.Add "b"
    colDaten.Add "c"
    colDaten.Add "d"
    colDaten.Add "e"
    colDaten.Add "f"
    colDaten.Add "g"
    
    For i = 1 To 3
        colDaten.Remove 1
    Next
    Debug.Print colDaten(1)
    Debug.Print colDaten(2)
    Debug.Print colDaten(3)
End Sub

Sie dürfen also nicht die ersten drei Einträge nacheinander löschen, sondern müssen dreimal den ersten (!) Eintrag entfernen.

Zum sicheren Erkennen logischer Fehler müssen Sie einen sehr hohen Aufwand treiben, weil diese gerade keine technischen Mängel enthalten.

Demgegenüber ist die letzte Kategorie von Fehlern, nämlich die Laufzeitfehler, leichter zu handhaben.