2013-11-23 119 views
0

我想通過使用VBA獲得兩個文本框內容之間的差異來計算年齡。從文本框中查找兩個日期的差異

我試了很多代碼沒有工作,最後我使用了下面的模塊。用戶表單將顯示Excel表單中的結果。

我想知道如何僅使用用戶表單文本框計算年齡。

模塊:

Function Age(Date1 As Date, Date2 As Date) As String 
    Dim d As Long, m As Long, y As Long 
    If Date2 < Date1 Then 
     Age = "-error-" 
     Exit Function 
    End If 
    m = DateDiff("m", Date1, Date2) 
    d = DateDiff("d", DateAdd("m", m, Date1), Date2) 
    If d < 0 Then 
     m = m - 1 
     d = DateDiff("d", DateAdd("m", m, Date1), Date2) 
    End If 
    y = m \ 12 
    m = m Mod 12 
    If y > 0 Then 
     Age = y & " Year" 
     If y > 1 Then 
      Age = Age & "s" 
     End If 
    End If 
    If Age <> "" And m > 0 Then 
     Age = Age & ", " 
    End If 
    If m > 0 Then 
     Age = Age & m & " Month" 
     If m > 1 Then 
      Age = Age & "s" 
     End If 
    End If 
    If Age <> "" And d > 0 Then 
     Age = Age & ", " 
    End If 

VBA在用戶形式使用是:

Private Sub txtDoB_AfterUpdate() 
    row_number = 0 
    Do 
    DoEvents 

    row_number = row_number + 1 
    item_in_review = Sheets("Data").Range("A" & row_number) 

    If item_in_review = txtSN.Text Then 
     Sheets("Data").Range("B" & row_number) = txtDoB.Text 
     txtAge.Value = Sheets("Data").Range("D" & row_number)  
    End If 

    Loop Until item_in_review = ""  
End Sub 
+0

你能給出一些例子' Date1'和'Date2'?並告訴我們你期望的結果是什麼樣的日期。 –

+0

ex。,日期1爲2009年4月20日,日期2爲2013年9月15日 所以結果應該是4年,4個月,26日 – user3024687

+0

你是否以這種方式寫下文字'2009年4月20日'或作爲日期'2009-04-20'。這些日期的「年齡函數」的預期結果是什麼? –

回答

0

轉換的 「2009年4月20日」 爲Date類型的問題是本月的名字,你的MonthName(m)函數結果是不同的。

那麼你可以手動處理:

Function toDate(strDate As String) As Date 
    Dim i As Integer 
    For i = 1 To 12 
     strDate = Replace(strDate, myMonthName(i), CStr(i)) 
    Next i 
    toDate = CDate(strDate) 
End Function 

' Add other months as your input is 
Function myMonthName(m As Integer) 
    Select Case m 
     Case 1: myMonthName = "January" 
     .. 
     Case 4: myMonthName = "April" 
     .. 
    End Select 
End Function 

同時,我可以建議你這個函數來計算的差來Date S:

Function diffDate(date1 As Date, date2 As Date) As String 
    Dim dTemp As Date 
    dTemp = DateSerial(Year(date1), Month(date1), Day(date1)) - DateSerial(Year(date2), Month(date2), Day(date2)) 
    diffDate = Trim(Year(dTemp) - 1900) & " Year(s), " & Trim(Month(dTemp)) & " Month(s) " & Trim(Day(dTemp)) & " Day(s)" 
End Function