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 

在这里输入图像说明