VBA Excel als Datum formatieren

VBA - Visual Basic for Application

Wer viele mit VBA arbeitet, kann sich unter anderem in den Office-Programmen, wie zum Beispiel Excel, viel Arbeit erleichtern, indem man Routineaufgaben automatisiert.
Ein Problem kann sein, dass man einen Wert, welcher ein Datum darstellt, mittels VBA in eine Excel-Zelle einfügen möchte. Das Einfügen geht prinzipiell relativ simpel mit den folgenden Code:

Sheets("Sheet1").Cells(5, 3).Value = "12.01.2022"

Das Problem dabei ist, dass der Wert dann zwar in der betreffenden Excel-Zelle enthalten ist und auch so lesbar ist sofern nicht eine andere Formatierung dazwischen funkt. Der Datumswert ist aber in der Excel-Zelle nicht als Datum formatiert, so dass man im Excel auch keine speziellen Datumsfunktionen, wie Rechnen mit dem Datum oder Wochentags-Ermittlung, ausführen kann.

Es wäre nun sehr mühsam bzw. gegen die eigentliche Arbeitserleichterung gerichtet, wenn man nun von Hand per Rechtsklicke => Zellen formatieren das betreffende Zellenformat auf “Datum” manuell umstellt.

In VBA auf Date-Typ konvertieren

Damit die Excelzelle automatisch die Datumsformatierung übernimmt, muss man im VBA den Date-Typ verwenden. Hat man den Wert nicht als diesen Typ vorliegen, dann muss man versuchen diesen auf Date zu konvertieren.

Dazu verwendet man die Funktion CDate(…).

Das folgende Code-Beispiel illustriert die Verwendung der CDate-Funktion sowie den Unterschied in der Formatierung eines Datums als String und als Date und dessen Auswirkung auf die Zellenformatierung in Excel.

Sub InsertDateString()
Dim MyDateString As String
Dim MyDate As Date

MyDateString = "12.01.2022"

On Error GoTo ErrorMessage:
    MyDate = CDate(MyDateString )

    Sheets("Sheet1").Cells(5, 3).Value = MyDateString
    Sheets("Sheet1").Cells(7, 3).Value = MyDate
Exit Sub
ErrorMessage:
    MsgBox "Fehler: Konnte Datum nicht konvertieren"
End
End Sub

Verwendet man dieses Makro, dann wird einmal in der Excel-Zelle C5 das Datum “12.01.2022” als normaler Text eingetragen. Die Formatierung der Zelle ist dann auf General bzw. Allgemein eingestellt.

Screenshot Excel Zellenformatierung Allgemein eines Datums
Datumseintrag hat nicht die richtige Formatierung als Datum

In der anderen Excel-Zelle C7 wird das Datum mittel VBA mit dem Datentyp Date eingefügt, nach dem die CDate()-Funktion angewendet wurde. In diesem Fall passt auch gleich die Zellenformatierung im Excel.

Screenshot Excel Zelle ist als Datum formatiert
Excel-Zelle ist auf den richtigen Datentyp “Datum” eingestellt

Man sieht also, dass die Verwendung des Datentyps Date im VBA-Code ausschlaggebend für die richtige Formatierung des Zellentyps in Excel ist.

Da die Konvertierung mittels CDate() zu einer Ausnahme (Programmabruch) führen kann, wenn der übergebene Wert nicht in ein Datum konvertiert werden kann, sollte man diese Ausnahme mit “On Error GoTo” abfangen und eine Fehlermeldung über MsgBox ausgeben.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert