|
Die Funktionen Hex$ und Oct$ konvertieren eine Zahl aus dem Dezimalsystem in die Darstellung im Hexadezimal- und Oktalsystem. Oft wird dazu eine Formatierung in einer festgelegten Anzahl von Stellen (meistens 2, 4 oder 8) gewünscht. Eine einfache Möglichkeit bieten die beiden hier vorgestellten Funktionen Hex und Oct, Sie ersetzen VB-Originale, wenn Sie sie in einem Standard-Modul platzieren. Die Originale können Sie trotzdem weiterhin aufrufen, indem Sie die VBA-Bibliothek spezifizieren - beispielsweise mit VBA.Hex(123).
Im ersten Parameter übergeben Sie wie gewohnt den darzustellenden dezimalen Wert. Im zweiten optionalen Parameter Digits können Sie die Anzahl der gewünschten Stellen angeben. Lassen Sie den Parameter weg bzw. übergeben Sie den Wert 0, erfolgt keine Formatierung. Bei Werten größer als 0 wird die Darstellung gegebenenfalls linksseitig mit Nullen bis zur gewünschten Stellenzahl aufgefüllt. Reicht die angegebene Stellenzahl nicht aus, um die Darstellung unterzubringen, wird ein Laufzeitfehler ausgelöst (Fehlernummer 6, Überlauf).
Sie können anstatt einer Stellenzahl auch einen der Werte aus der Enumeration HexOctFormatConstants übergeben. Bei hoFormatVB (-1) wird der Darstellung die entsprechende Kennung in VB vorangestellt (hexadezimal: &H, octal: &O), bei hoFormatVBLongSuffix (-2) wird dazu noch die Kennzeichnung für einen Long-Datentyp ("&H...&") angehängt. Diese beiden Formatierungen können bei der Generierung oder der bloßen Ausgabe von Quelltext ganz nützlich sein.
Public Enum HexOctFormatConstants
hoFormatNone = 0
hoFormatVB = -1
hoFormatVBLongSuffix = -2
End Enum
Public Function Hex(ByVal Value As Long, _
Optional ByVal Digits As HexOctFormatConstants = hoFormatNone) _
As String
Dim nHex As String
Dim nDigits As Integer
Select Case Digits
Case hoFormatNone
Hex = VBA.Hex$(Value)
Case Is > 0
nHex = VBA.Hex$(Value)
nDigits = Digits - Len(nHex) + 1
If nDigits > 0 Then
Hex = String$(Digits, "0")
Mid$(Hex, nDigits) = nHex
Else
Err.Raise 6
End If
Case hoFormatVB
Hex = "&H" & VBA.Hex$(Value)
Case hoFormatVBLongSuffix
Hex = "&H" & VBA.Hex$(Value) & "&"
Case Else
Err.Raise 5
End Select
End Function
Public Function Oct(ByVal Value As Long, _
Optional ByVal Digits As HexOctFormatConstants = hoFormatNone) _
As String
Dim nOct As String
Dim nDigits As Integer
Select Case Digits
Case hoFormatNone
Oct = VBA.Oct$(Value)
Case Is > 0
nOct = VBA.Oct$(Value)
nDigits = Digits - Len(nOct) + 1
If nDigits > 0 Then
Oct = String$(Digits, "0")
Mid$(Oct, nDigits) = nOct
Else
Err.Raise 6
End If
Case hoFormatVB
Oct = "&O" & VBA.Oct$(Value)
Case hoFormatVBLongSuffix
Oct = "&O" & VBA.Oct$(Value) & "&"
Case Else
Err.Raise 5
End Select
End Function
|