Excel,VBA和date

所有我想要做的是采取一个date,添加一个date,将其坚持在工作表中,让工作表在input的date运行公式。 单元格的格式都是英文date,但是当我用下面的代码赋值单元格的值时,它认为它的date是美式格式,即使它已经是英文格式,所以试图把它转换成英文格式。 我怎样才能阻止它在美国思考?

我放弃了VBA的所有function,并且增加了一个function,因为VBA让我很头疼。

Dim D, M, Y As String Dim S1, S2, NewDay, NewMonth, NewYear As Integer S1 = InStr(1, StartDate.Value, "/") S2 = InStr(S1 + 1, StartDate.Value, "/") Debug.Print (CStr(S1) + " " + CStr(S2)) D = Mid(StartDate.Value, 1, S1 - 1) M = Mid(StartDate.Value, S1 + 1, S2 - S1 - 1) Y = Mid(StartDate.Value, S2 + 1) Debug.Print (D + " " + M + " " + Y) NewDay = CInt(D) + 1 NewMonth = CInt(M) NewYear = CInt(Y) If NewDay > DaysInMonth(M, Y) Then NewDay = 1 NewMonth = NewMonth + 1 If NewMonth > 12 Then NewMonth = 1 NewYear = NewYear + 1 End If End If StartDate.Value = CStr(NewDay) + "/" + CStr(NewMonth) + "/" + CStr(NewYear) 

然后在另一个函数中,我只是像这样设置单元格的值

 With sheet.Range("A2") '.. Stuff .Offset(i, 1) = StartDate.Value 

VBA预计所有的date都是美式的:mm / dd / yy。
我只是使用适当的格式常量: kUsFmt = "#mm\/dd\/yyyy#"
然后,无论我需要一个date,我使用格式函数与kUsFmt:

 strSql = "...WHERE myDate = " & Format (Date,kUsFmt) 

编辑:

而且你为什么在你的代码中将事物分解成M dy? 将1添加到date非常简单
myDate = myDate + 1

 Function AddDay(StartDate As Date) As Date AddDay = StartDate + 1 End Function 

也许我不明白你的问题,但如果你把你的date作为datetypes ,Excel将为你做这个。 你不必考虑月底或年底。

Excel单元格中的外观是另一个部分。 这是纯粹的格式。 您可以直接格式化单元格(右键单击 – >格式单元格 – >select“date”并select您的格式),或者在VBA中,您必须说明单元对象显示的格式。

请不要用你自己操纵的琴弦来做这件事,这就像重新发明轮子一样。

你可以在这里学习Excel的cpearson.com/Excel/DateFunctions,Excel中的date。

更新: 这是更好的链接,我的第一个是在单元格内的date公式。

我认为这个问题就在于操纵string。 为什么不尝试这样的事情:

StartDate.Value =格式(DateSerial(NewYear,NewMonth,NewDay),“dd / mm / yyyy”)

我知道使用date可以是非常frutstrating,但请不要写另一个date转换/添加/格式化例程,你将来的维护者将不会感谢你。

关于唯一的通用格式是yyyy-mm-dd,它几乎可以被每个date函数正确读取。 尝试以这种格式书写和阅读标准的英国date格式。