Freigeben über

Excel #WERT! Fehler erscheint nur einmal - verschwindet nach erneuter ENTER-Eingabe

Anonym
2020-03-19T11:55:40+00:00

Hallo.

Ich habe in Zelle A1 einen hexadezimalen Code.

Diesen wandle ich in Zelle B1 in einen binären Code um.

Wiederum daraus möchte ich in Zelle C1 mit der Funktion "DecodeVal" einen Wert aus diesem binären Code in B1 generieren.

Hier die Funktion:

Public Function DecodeVal(value, start As Integer, length As Integer) As Long

Dim abschnitt As String
Dim i As Integer
Dim valueText As String

    valueText = value.Text
    If (Len(valueText) - start - length + 1 > 0) Then
        abschnitt = Mid(valueText, Len(valueText) - start - length + 1, length)
    Else
        If (Len(valueText) > start) Then
            abschnitt = Left(valueText, Len(valueText) - start)
            length = Len(valueText) - start
        End If
    End If

    Do
        If (Int(Left(abschnitt, 1)) = 1) Then
            DecodeVal = DecodeVal * 2 + 1
        Else
            DecodeVal = DecodeVal * 2
        End If
        abschnitt = Right(abschnitt, length - 1)
        length = length - 1
    Loop While length > 0

End Function

Wenn ich nun einen hex-Code in A1 einfüge, funktioniert die Umwandlung in B1 zu binär, allerdings gibt mir C1 einen #WERT! Fehler aus.

Wenn ich allerdings nochmal in das Textfeld von A1 klicke und dann ENTER drücke, verschwindet der Fehler und der korrekte Wert wird in C1 angezeigt.

Wenn ich den binären Code direkt als Text kopiere, und dann in B1 einfüge, kommt die 'WERT! Fehlermeldung gar nicht.

Woran liegt das und wie kann ich es beheben?

Bitte um Unterstützung & Vielen Dank

Clemens

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
{count} Stimmen

4 Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2020-03-19T14:45:22+00:00

    Hallo Claus,

    ich habe mittlerweile den Fehler entdeckt.

    Es lag an .Text.

    Ich hätte .Value nehmen müssen - jetzt funktioniert es.

    LG

    Clemens

    0 Kommentare Keine Kommentare
  2. Anonym
    2020-03-19T13:33:36+00:00

    Hallo Clemens,

    bevor ich etwas poste, teste ich es selbst. Bei mir läuft es ohne Probleme.

    Du könntest mal am Anfang des Codes

    Application.Volatile

    einfügen.

    Claus

    0 Kommentare Keine Kommentare
  3. Anonym
    2020-03-19T13:26:36+00:00

    Hallo Claus,

    danke für die Antwort.

    Ich habe es getestet und jetzt bekomme ich immer den #WERT! Fehler, auch wenn ich nochmal extra mit ENTER bestätige.

    LG

    Clemens

    0 Kommentare Keine Kommentare
  4. Anonym
    2020-03-19T13:00:12+00:00

    Hallo Clemens,

    value und length sind Keywods und sollten nicht als Variablenname verwendet werden. Gleich in dem ersten IF-Statement hast du die Variable length untergebracht, sie aber noch gar nicht initialisiert. Das passiert erst 5 Zeilen darunter.

    Probiere es mal so:

    Function DecodeVal(myRng As Range, start As Integer) As Long
    
    Dim abschnitt As String
    Dim laenge As Integer
    Dim i As Integer
    Dim valueText As String
    
    valueText = myRng.Text
    laenge = Len(valueText) - start
    If (Len(valueText) - laenge + 1 > 0) Then
        abschnitt = Mid(valueText, Len(valueText) - start - laenge + 1, laenge)
    Else
        If (Len(valueText) > start) Then
            abschnitt = Left(valueText, Len(valueText) - start)
        End If
    End If
    
    Do
        If (Int(Left(abschnitt, 1)) = 1) Then
            DecodeVal = DecodeVal * 2 + 1
        Else
            DecodeVal = DecodeVal * 2
        End If
        abschnitt = Right(abschnitt, laenge - 1)
        laenge = laenge - 1
    Loop While laenge > 0
    
    End Function
    

    Rufe dann die Funktion im Blatt auf mit der Zelladresse und dem gewünschten Start, z.B.:

    =DecodeVal(B1;0)

    Claus

    0 Kommentare Keine Kommentare