Hallo Claus,
ich habe mittlerweile den Fehler entdeckt.
Es lag an .Text.
Ich hätte .Value nehmen müssen - jetzt funktioniert es.
LG
Clemens
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
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
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.
Hallo Claus,
ich habe mittlerweile den Fehler entdeckt.
Es lag an .Text.
Ich hätte .Value nehmen müssen - jetzt funktioniert es.
LG
Clemens
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
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
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