Excel VBA格式函数不会返回所需的date
我有一个Excel表格,E2 =“10-Apr-16”作为自定义格式。 我想返回它的周数(也许是16)。 我使用的代码(E2有效):
With ActiveCell .NumberFormat = "mm/dd/yyyy" .Value = Date End With oneDate = Format(Range("E2").Select, "mm/dd/yyyy") weekNumber = DatePart("ww", oneDate)
oneDate竟然是12/29/1899,WeekNumber是52.我的代码有什么问题?
更新:
我后来改变了代码:
Range("E:E").NumberFormat = "m/dd/yyyy" oneDate = Range("E2") oneDate = Format(Range("E2").Select, "m/dd/yyyy") weekNumber = DatePart("ww", oneDate)
有了这个,我得到12/29/1899作为一个date,52作为weekNumber。
没有第三行(甚至没有第一行),代码将正常工作,并返回16作为weekNumber;
随着第三行(不pipe有没有第一行),它仍然返回12/29/1899。
我认为问题是在第三行的代码,但不知道它是什么。 有人知道我做错了吗?
您的代码将系统date插入到ActiveCell(无论哪一个恰好),然后您将一个date设置为E2
我不完全知道你希望达到什么目的,但是你似乎可以达到你所说的
weekNumber = datepart("ww", Range("E2"))
只要E2中的内容实际上是Excel识别为date的date序列号,而不仅仅是看起来像date的文本(重要的区别)
如果weekNumber仍然是错误的,请尝试
weekNumber = datepart("ww",date)
这将得到当前的星期编号,并且意味着E2并不是Excel的真正date
也许:
Sub qwerty() Dim d1 As Date d1 = ActiveCell.Value MsgBox Application.WorksheetFunction.WeekNum(d1) End Sub