如何将string转换为date

我试图将string转换为date

a = Datumo: 16.09.2012. d = Mid(a, 9, 2) ' 16 - should be the day m = Mid(a, 12, 2) ' 09 - month y = Mid(a, 15, 4) ' 2012 - year Dim dt As Date dt = DateValue(d, m, y) ' Error line dt = DateAdd("d", 1, dt) ' should be 17.09.2012. 

我怎么可以这样做?

那是不正确的使用DateValue ,取代

 dt = DateValue(d, m, y) ' Error line dt = DateAdd("d", 1, dt) ' should be 17.09.2012. 

 dt = DateSerial(y, m, d) dt = DateAdd("d", 1, dt) 

要么

 dt = 1 + DateAdd("d", 1, dt) 

看看DatePart函数;)

从exccel-help:

 Dim Datum1 As Date ' Variablen deklarieren. Dim Msg Datum1 = InputBox("Geben Sie ein Datum ein:") Msg = "Quartal: " & DatePart("q", Datum1) MsgBox Msg 

还有一个特定的function来检索有效date的部分:

 Day() Month() Year() 

来自excel-help的示例:

 Dim Datum1, Tag1 Datum1 = #12. Februar 1969# ' Datum zuweisen. Tag1 = Day(Datum1) ' Tag1 enthält 12. 

VBA / Excel通常会尝试确定date并将其错误。

例如

 dt = DateSerial(2012, 14, 42) 'returns #14/03/2013# dtReal = IsDate("09 / 14 / 2012") 'returns TRUE when we really wanted to test dd/mm/yyyy - there's no 14th month. 

我经常使用下面的代码来确定一个stringdate是否是真实的,并将其作为date返回,这是一个更长,但却十分简单的方法。

 Option Explicit Sub test() Dim testDate As Boolean Dim dt As Date testDate = IsTextDate("05/07/2012", dt, "dd/mm/yyyy") 'Could pass "mm/dd/yyyy" instead If testDate = True Then Debug.Print "Valid Date " & Format(dt, "dd-mmm-yyyy") Else Debug.Print "Invalid Date" End If End Sub Function IsTextDate(ByVal str As String, ByRef dt As Date, Optional dtFormat As String = "dd/mm/yyyy") As Boolean Dim D As Date Dim day As Integer Dim month As Integer Dim year As Long Dim daysinFeb As Integer Dim dtArray() As String 'Test input string mask matches date format If Not (str Like "##/##/####") Then 'Debug.Print "Invalid Date" Exit Function Else 'split string on delimiter and extract correct 'dd' and 'mm' based on UK/US format dtArray = Split(str, "/") year = CInt(dtArray(2)) If dtFormat = "dd/mm/yyyy" Then day = CInt(dtArray(0)) month = CInt(dtArray(1)) Else day = CInt(dtArray(1)) month = CInt(dtArray(0)) End If 'determine days in Feb for year given. If IsDate("2/29/" & year) Then daysinFeb = 29 Else daysinFeb = 28 End If 'determine if date is valid Select Case month Case 9, 4, 6, 11 '30 days If day <= 30 Then IsTextDate = True Case 1, 3, 5, 7, 8, 10, 12 '31 days If day <= 31 Then IsTextDate = True Case 2 'either 28 or 19 days If day <= daysinFeb Then IsTextDate = True End Select If IsTextDate Then dt = DateSerial(year, month, day) End If End Function