以Excel和计算date差异在DD / MM / YYYY中存储date

我有一个Excel表格,下面的列。

ABCD Worker Work Start Date Work End Date Working Period(BC) 1 1/1/2014 1/10/2014 0 Years 0 Months 10 Days 2 1/1/2014 2/28/2014 0 Years 2 Months 00 Days 

我有用户窗体将接受这些值从文本框中存储在Excel工作表。

问题是在inputdate[以dd / mm / yyyy格式]作为15/07/2014它接受并保存为15/07/2014在DD / MM / YYYY格式在Excel表格。

如果我给15/17/2014它抛出错误date应该在DD / MM / YYYY

同样的事情如果我给date为2014年7月15日它接受date,并在Excel列中保存为7/15/2014,而它显示15/07/2014,因为我已经设置格式为DD / MM / YYYY

我使用下面的validation。

 If Me.txtStartDate.Value = "" Then MsgBox "Please enter Work Start Date." Me.txtStartDate.SetFocus Exit Sub End If If Not IsDate(Me.txtStartDate.Value) Then MsgBox "The Work Start Date Field must be in DD/MM/YYYY format" Me.txtStartDate.SetFocus Exit Sub End If 

理想情况下,这是我所期待的。 只有通过表格input有效date。 我使用文本框以DD / MM / YYYY格式inputdate。 有可能用户inputdate为01/12/2014或1/12/2014。 我的意思是可以input前导零或不inputDD和MM。

请咨询我如何处理这个问题。 Excel如何处理date实际存储在哪种格式。

如何计算年月日格式中的期间列。

谢谢您的帮助 。

我认为这个函数应该适合检查文本框中的string是否正确。 如果可以,则返回true,并在第二个参数中parsingdate。

 Option Base 0 Function GetDate(str As String, ByRef res As Date) As Boolean On Error GoTo Err Splits = Split(str, "/") If UBound(Splits) + 1 <> 3 Then Err.Raise 0 End If ds = DateSerial(Splits(2), Splits(1), Splits(0)) ' eg DateSerial(2014, 1, 32) would be interpreted as Feb 1, 2014; this is checked here If Month(ds) <> CInt(Splits(1)) Or Day(ds) <> CInt(Splits(0)) Then Err.Raise 0 End If res = ds GetDate = True Exit Function Err: GetDate = False End Function 

问题是你可以定义输出格式,但VBA根据你的计算机上的区域设置来parsinginput。 如果您所需的格式与默认格式不同,则必须自行实施parsing。

几件事:

一个。 你可以在你的代码中使用适当的地方(绕过validation检查代码)

 With ActiveWorkbook.Worksheets("yourSheet") .Columns("B:B").NumberFormat = "mm/dd/yyyy;@" .Columns("C:C").NumberFormat = "mm/dd/yyyy;@" End With 

湾 你可以像这样使用datediff

 ToDate = "10/09/2014" 'use range("yourRange").value FromDate = "09/19/2014" 'use range("yourRange").value dayDiffered = DateDiff("d", ToDate, FromDate) monthDiffered = DateDiff("m", ToDate, FromDate) yearDiffered = DateDiff("yyyy", ToDate, FromDate)