Der 8 Jahre alte Bug in 64-Bit-VBA

Denkt ihr aktuell über einen Umstieg von 32-Bit auf ein 64-Bit-Office nach. In Firmen könnte dieser Schritt möglicherweise tzz Problemen führen. Denn in der 64-Bit-Version von Visual Basic for Applications (VBA) gibt es unter Windows einen Compiler-Fehler, der seit Jahren nicht behoben worden ist. Die Migration zu einem 64-Bit-Office sollte daher überlegt werden. Ich hole mal einen Sachverhalt hervor, der mit bereits im August 2021 unter die Augen gekommen ist.


Anzeige

Ich bin bei The Register über diesen Beitrag auf das Thema aufmerksam geworden. Das Ganze ist Mitte 2021 bereits bei Stack Overflow in diesem Post aufgegriffen worden. Der Betroffene hat das Problem mit einem kurzen Quellcode-Beispiel demonstriert.

' this needs to be here to trigger the bug: 
Private Sub Class_Terminate()
End Sub
Function ReturnFalse(o As Object) As Boolean
    ReturnFalse = False
End Function

Sub Test()
    Debug.Print ReturnFalse(New SomeClass)
    If ReturnFalse(New SomeClass) Then
        Debug.Print True
    Else
        Debug.Print False
    End If    
End Sub

Wird der Funktionsaufruf ReturnFalse  in einer 32-Bit-VBA-Umgebung ausgeführt, liefert diese das erwartete Resultat FALSE FALSE zurück. In einer 64-Bit-VBA-Umgebung kommen jedoch die Resultat FALSE TRUE zurück. Der Thread-Ersteller hat den Fehler bis auf dieses minimale Beispiel zurückverfolgt.

Anscheinend liegt das Problem darin, dass die Verwendung eines temporären Objekts (hier new SomeClass) die Auswertung der IF-Bedingung irgendwie unterbricht. Es sieht so aus, als ob der Wert der Bedingung True ist, egal was passiert. Das ist ein schwerwiegender Fehler, denn der 64-Bit-Compiler spinnt und damit sind alle IF-Abfragen nicht mehr vertrauenswürdig.

Laut The Register wurde der Bug bereits 2018 in Excel User Voice an Microsoft gemeldet (der Beitrag wurde entfernt). Der Fehler besteht wahrscheinlich schon seit Jahren, möglicherweise seit der Einführung von 64-Bit-VBA in Office 2010. Der StackOverflow-Benutzer konnte diesen Fehler in allen Versionen von Office finden, beginnend mit 2013. Der Bug ist wahrscheinlich mindestens 8 Jahre alt. Der Fehler tritt in VBA auf dem Mac nicht auf. Ich kann es aktuell nicht testen – aber es sieht nicht so aus, als ob der Bug bisher behoben wurde. Irgend jemand mit einem 64-Bit-Office, der das verifizieren kann?


Cookies blockieren entzieht uns die Finanzierung: Cookie-Einstellungen

Dieser Beitrag wurde unter Software abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

7 Antworten zu Der 8 Jahre alte Bug in 64-Bit-VBA

  1. Theo sagt:

    Ich erhalte bei einem Test (Excel 2016 64-Bit auf Win10) auch ein:

    Falsch
    Wahr

    Gruß
    Theo

  2. A. Nonym sagt:

    Hallo,

    der Test war mit Excel 2019:

    Beides Mal war das Egebnis: false

    Ebenso der Test mit der While-Schleife.

  3. Peter sagt:

    Ja, der Fehler ist bekannt und war leider über Jahre nachvollziehbar.
    Ich hatte 2018 den Eintrag "35735881-fix-inlined-member-calls-on-user-objects-on-64-bit…" im UserVoice eingetragen, aber keinerlei Korrekturen erfolgten seitdem…
    …bis er nach den letzten Updates 2021-12 plötzlich behoben wurde.
    Meine automatischen Tests haben mir dies mitgeteilt. Getestet mit Microsoft Access 2013 64-Bit.
    Leider muss ich meine Workarounds auf absehbare Zeit erst einmal weiter nutzen, da ich nicht davon ausgehen kann, dass unsere Kunden alle zeitnah ihr Office/VBA aktualisieren…

  4. A. Nonym sagt:

    Sorry, anderes Thema: Privacy

    Vor einigen Tagen habe ich Javascript entdeckt und eine Frage:

    Document

    // Media-Devices
    if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
    console.log('Devise-Enumeration nicht möglich');
    } else { console.log('Enumeration ok')};

    navigator.mediaDevices.enumerateDevices()
    .then(function(devices) {
    document.writeln('ok');
    devices.forEach(function(device) {
    console.log(device.kind + ': ' + device.label + ' ID = ' + device.deviceId);
    });
    })
    .catch(function(err) {
    console.log(err.name + ': ' + err.message);
    });

    Auf meinem Laptop wird der Videoinput mit "niwpA1…", der Audioinput mit "AEwShy…" angegeben. Wie eindeutig sind diese Werte?

  5. Anonymous sagt:

    Hi
    Microsoft® Word für Microsoft 365 MSO (Version 2111 Build 16.0.14701.20254) 64 Bit
    damit bekomme ich
    Falsch
    Falsch

    Somit scheint der Bug korrigiert zu sein.

  6. Peter Müller sagt:

    Hallo,

    funktioniert die Dateivorschau im Explorerer mittlerweile mit einer 64bit Version?

    Gruss

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Bitte beachtet die Regeln zum Kommentieren im Blog (Erstkommentare und Verlinktes landet in der Moderation, gebe ich alle paar Stunden frei, SEO-Posts/SPAM lösche ich rigoros). Kommentare abseits des Themas bitte unter Diskussion.