|
Sie kennen die Visual Basic-Funktion Asc, die den Ascii-Wert des ersten Zeichens eines String zurückgibt? Und Sie kennen auch deren Byte- und Unicode-Varianten AscB und AscW? Die Funktion AscM und deren Varianten AscMB und AscMW werden Sie aber nicht nicht kennen. Lebenswichtig ist sie auch nicht. Sie reduziert aber den Code, der zum Ermitteln des Ascii-Wertes eines Zeichens weiter innerhalb eines String notwendig ist. Und zum Ersetzen eines Zeichens in einem String unter Angabe des Ascii-Wertes folgt sie dem Vorbild der Mid$-"Funktion", die ja auch in umgekehrter Richtung arbeitet.
Dim nText As String
nText = "Hallo_Welt"
Debug.Print AscM(nText, 6)
ergibt den Ascii-Wert des Unterstrichs (95). Und um den Unterstrich beispielsweise durch ein Leerzeichen (Ascii-Wert 32) zu ersetzen, können Sie nun folgendes schreiben:
AscM(nText, 6) = 32
Debug.Print nText
ergibt wie gewünscht:
Hallo Welt
Sie werden sich vielleicht wundern, wie die Verwendung einer Funktion mit einer Zuweisung möglich sein kann. Sie ist genau so möglich, wie ja auch die Verwendung der Mid$-"Funktion" (Aha, Anführungszeichen...!) in einer Zuweisung schon seit eh und je in Basic-Dialekten möglich ist. Im Grunde arbeitet die Mid$-"Funktion" im Prinzip schon immer auf die gleiche Weise, wie wir sie erst seit Visual Basic 4 selbst an die Hand bekommen haben: als Paar von Eigenschaften-Prozeduren. Diese können ja nicht nur in Klassen und Forms usw. verwendet werden, sondern auch in Standard-Modulen, sozusagen als "globale" Eigenschaften. Und wer schreibt schließlich vor, dass in Eigenschaften-Prozeduren eines Moduls tatsächlich ein für dieses Modul privater, gekapselter Wert zu behandeln sei? Die AscM-"Funktion" sieht demnach als Paar von Eigenschaften-Prozeduren so aus:
Public Property Get AscM(Str As String, _
Optional ByVal CharIndex As Long = 1) As Integer
AscM = VBA.Asc(Mid$(Str, CharIndex, 1))
End Property
Public Property Let AscM(Str As String, _
Optional ByVal CharIndex As Long = 1, New_AscM As Integer)
Mid$(Str, CharIndex, 1) = Chr$(New_AscM)
End Property
Die entsprechenden "B"- und "W"-Varianten haben wir natürlich auch nicht vergessen:
Public Property Get AscMB(Str As String, _
Optional ByVal CharIndex As Long = 1) As Integer
AscMB = VBA.AscB(MidB$(Str, CharIndex, 1))
End Property
Public Property Let AscMB(Str As String, _
Optional ByVal CharIndex As Long = 1, New_AscMB As Integer)
MidB$(Str, CharIndex, 1) = ChrB$(New_AscMB)
End Property
Public Property Get AscMW(Str As String, _
Optional ByVal CharIndex As Long = 1) As Integer
AscMW = VBA.AscW(Mid$(Str, CharIndex, 1))
End Property
Public Property Let AscMW(Str As String, _
Optional ByVal CharIndex As Long = 1, New_AscMW As Integer)
Mid$(Str, CharIndex, 1) = ChrW$(New_AscMW)
End Property
|