|
Zum vollen oder abgekürzten Namen eines Monats anhand seiner Nummer (1 bis 12) verhilft Ihnen die Format$-Funktion. Dazu konstruieren Sie zunächst mittels der Funktion DateSerial ein beliebiges Datum, wobei Sie die Nummer des betreffenden Monats verwenden und Tag und Jahr beliebig wählen können. Von der Format$-Funktion erhalten Sie dann den Namen des Monats in der im System eingestellten Landessprache - je nach Formatierungsangabe, "mmm" für den abgekürzten Namen, und "mmmm" für den vollen Namen. Die Hilfsfunktion NumToMonth fasst die Aufrufe beider Funktionen zusammen und prüft zugleich, ob eine gültige Monatsnummer übergeben worden ist. Wurde eine ungültige Nummer übergeben, gibt sie einen leeren String zurück. Setzen Sie den optionalen Parameter Short auf True, erhalten Sie den abgekürzten Monatsnamen, ansonsten den vollen Monatsnamen.
Public Function NumToMonth(MonthNum As Integer, _
Optional ByVal Short As Boolean) As String
Select Case MonthNum
Case 1 To 12
If Short Then
NumToMonth = Format$(DateSerial(2000, MonthNum, 1), "mmm")
Else
NumToMonth = Format$(DateSerial(2000, MonthNum, 1), "mmmm")
End If
End Select
End Function
Zur Umkehrung, also zur Ermittlung der Monatsnummer aus einem gegebenen Monatsnamen oder seiner Abkürzung, bietet Visual Basic anscheinend keine derart direkte Unterstützung. Es gibt zwar die Funktion Month, doch erwartet diese ein komplettes gültiges Datum als Parameter. Eine Funktion, die uns ähnlich wie DateSerial ein Datum liefern könnte, jedoch einen Monatsnamen in String-Form annehmen würde, gibt es leider nicht. Allerdings ist die CDate-Funktion in der Lage, selbst noch aus ziemlich "verhunzten" Datumsangaben in String-Form noch ein gültiges Datum machen.
CDate("1. Januar 2001")
CDate("1. Janu 2001")
CDate("1.jan")
CDate("jan 1. 2001")
CDate("Janua 1.01")
CDate("jan 2001 1")
CDate("jan 1")
Alle diese Varianten werden schön säuberlich zu einem 1.1.2001 konvertiert - vorausgesetzt, der darin steckende Monatsname besteht aus dem ersten, mindestens drei Zeichen langen Teil eines Monatsnamens in der im System eingestellten Landessprache. Die letzte der oben stehenden Varianten bildet das effizienteste, weil kürzeste Modell für die Konstruktion eines Strings, den wir nun nach seiner Konvertierung mit CDate an die Month-Funktion verfüttern können. Die folgende Funktion MonthToNum gibt 0 zurück, wenn ein nicht als Monatsname identifizierbarer String übergeben worden wurde.
Public Function MonthToNum(MonthName As String) As Integer
On Error Resume Next
MonthToNum = Month(CDate(MonthName & " 1"))
End Function
|