2012-04-15 7 views
1

Ich brauche ein String-Variable zu einer Datumsvariablen in einem VBA-Makro zu konvertieren, um das Datum zu verarbeiten, um die mMonth und Jahr zu erhalten, um das ArbeitsblattConvert String-Variable bis heute

Call GetMonthandYear(MonthYear, FileDate) 
    ActiveSheet.Name = MonthYear 

ich suche zu nennen Erstellen Sie eine Methode namens GetMonthandYear. FileDate ist eine Zeichenfolge in einem Datumsformat dd.MM.yyyy HH-mm-ss. Wenn ich die Variable in ein Datum ändern kann, kann ich das Format in MMMM/yyyy ändern und dann ToString verwenden, denke ich, und es MonthYear zuweisen.

Gibt es eine Möglichkeit, die Zeichenfolge in ein Datum zu ändern?

Antwort

2

Es gibt mehrere Probleme mit Ihrem Vorschlag aaproach:

  1. Strings bisher serielle Konvertierung kann problematisch sein, mit Unsicherheit, wenn Excel das Datum als dd.MM oder MM.dd interpretieren. Da Sie das Format im Voraus kennen, extrahieren Sie den Monat und das Jahr direkt.
  2. \ ist kein gültiges Zeichen für Blattnamen. Ich habe _ verwendet, Ersatz, wie Sie

Function GetMonthandYear(FileDate As String) As String 
    Dim dot1 As Long, dot2 As Long 
    Dim m As String, y As String 

    dot1 = InStr(FileDate, ".") 
    dot2 = InStr(dot1 + 1, FileDate, ".") 
    m = Mid$(FileDate, dot1 + 1, dot2 - dot1 - 1) 
    y = Mid$(FileDate, dot2 + 1, InStr(FileDate, " ") - dot2 - 1) 

    GetMonthandYear = Format$(DateSerial(y, m, 1), "MMMM_yyyy") 
End Function 

es wie dieses

Sub Test() 
    Dim FileDate As String 
    FileDate = "15.04.2012 16-31-18" 

    ActiveSheet.Name = GetMonthandYear(FileDate) 

End Sub 
0

Haben Sie versucht, die Funktionen CDate und Format zu verwenden?

+0

Nie CDate gehört Rufen Sie wollen haben, aber nur ToDateTime Methode derzeit –

0

Sie können Datum mit CDate Funktion erhalten, aber es erfordert - durch : und . ersetzt werden durch / ersetzt werden.

Dim yourStringDate, sBuf As String 
Dim yourDateVariable As Date 

yourStringDate = "15.04.2012 16-31-18" 
sBuf = Replace$(yourStringDate,"-", ":") 
sBuf = Replace$(sBuf, ".", "/") 
yourDateVariable = CDate(sBuf) 

MsgBox yourDateVariable 
+0

gefunden Experimentieren Es scheint Ihre Methode sollte funktionieren, aber ich halte einen Typ Mismatch 'Sub GetMonthandYear (MonthYear, FileDate) Dim DatumBuf als Datum DateBuf = CDate (ersetzen $ (FileDate, "-", ":")) End Sub' –