Mittels VBA kann man im Bereich von Microsoft Office (Excel, Word, Access, etc.) sehr viele routinemäßige Aufgaben durch die Programmierung von Makros automatisieren, um sich das Leben etwas zu erleichtern. Dabei kann es erforderlich werden, dass man im Rahmen einer String-Ausgabe zum Beispiel per MassegeBox auch ein Datum, also eine Variable vom Datentyp Date, ausgeben möchte.
Laufzeitfehler Typen unverträglich
Versucht man eine direkte Verkettung von String und Date, dann erhält man beim Ausführen des Makros einen Laufzeitfehler ’13’ mit dem Hinweis “Typen unverträglich”.
Sub DateToString()
Dim myDate As Date
Dim myString As String
myString = "Mein großer Tag ist der "
'aktuelle Datum von heute zuweisen
myDate = Date
myString = myString + myDate
MsgBox (myString)
End Sub
Gefahr erkannt, Gefahr gebannt! Die Fehlermeldung kommt zurecht. Schließlich kann man in Datentyp-stringenten Programmiersprachen nicht einfach verschiedene Datentypen einandern zuweisen. Dass heißt man muss vorher den Datentyp Date in einen String konvertieren, genauso wie man im VBA auch Integer zu String umwandeln muss.
Konvertierung mit CStr()
Die Umwandlung nimmt man dazu mit der Funktion CStr(arg) vor. Als Argument übergibt man in diesem Fall die Datums-Variable, wobei CStr() eine überladene Funktion ist und auch Integer-Werte, Bool-Werte oder Double-Werte umwandeln kann.
Sub DateToString()
Dim myDate As Date
Dim myString As String
myString = "Mein großer Tag ist der "
'aktuelle Datum von heute zuweisen
myDate = Date
myString = myString + CStr(myDate)
MsgBox (myString)
End Sub
Die Funktion CStr() ist auch einfach zu merken, indem man sich vorstellt, dass das “C” für Convert steht und “Str” für String. Somit kann man also ein Datum ganz schnell in eine Zeichenkette umwandeln, um das Datum zum Beispiel in einer MessageBox darzustellen.
Datumsausgabe formatieren: Umwandlung mit Format()-Funktion
Mit CStr() erfolgt die Ausgabe des Datums in dem Format, welches den Datumseinstellungen bzw. Länder-/Regionseinstellungen des Betriebssystem entspricht. Möchte man das Datum in einem anderen Format ausgeben, so kann man die Funktion Format(date, formatString) verwenden. Diese übergibt man zwei Argument.
- date…das Datum vom Datentyp Date
- formatString…ein String der beschreibt, wie das Datum zu formatieren ist
Die Funktion hat als Rückgabewert den Datentyp String.
Symbole für Datums-Formatierungen
Die nachfolgende Liste zeigt die möglichen Symbole, die man im Formatierungs-String verwenden kann:
- yyyy……….100-9999 (drei oder vierstellige Jahresangabe)
- yy…………..00-99 (Die letzten zwei Ziffern des Jahrs)
- y…………….1-366 (Tag des Jahrs)
- mmmm….vollständiger Monatsname
- mmm…….abgekürzter Monatsname
- mm……….01-12 (Monat des Jahrs, mit vorangestellter Null, beginnend mit Januar = 01)
- m………….1-12 (Monat des Jahrs, ohne vorangestellte Null, beginnend mit Januar = 1)
- ww………..1-53 (Woche des Jahrs, ohne vorangestellte Null; Woche 1 beginnt am 1. Januar)
- w…………..1 bis 7 (Tag der Woche, beginnend mit Sonntag = 1)
- dd…………01-31 (Tag des Monats, mit vorangestellter Null)
- d…………..1-31 (Tag des Monats, ohne vorangestellte Null)
Code-Beispiel
Das folgende Code-Beispiel zeigt, wie man den Datentyp Date in einen formatierten String konvertiert, so dass man das Datumsformat individuell gestalten kann.
Sub DateToString()
Dim myDate As Date
Dim myString As String
myString = "Mein großer Tag ist der "
'aktuelle Datum von heute zuweisen
myDate = Date
myString = myString + Format(myDate, "yyyy-mmm-dd")
MsgBox (myString)
End Sub