Excel VBA 格式化函数没有 return 所需的日期

Excel VBA Format function does not return desired date

我有一个 Excel sheet,E2 = "10-Apr-16" 作为自定义格式。我想 return 它的周数(可能是 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 作为 oneDate,52 作为 weekNumber。

没有第三行(甚至没有第一行),代码将正常工作 return 16 as weekNumber;

第三行(无论 with/without 第一行),它仍然是 returned 12/29/1899。

我认为问题出在第三行的代码上,但不确定是什么。有人知道我是怎么弄错的吗?

也许:

Sub qwerty()
    Dim d1 As Date
    d1 = ActiveCell.Value
    MsgBox Application.WorksheetFunction.WeekNum(d1)
End Sub

您的代码将系统日期插入到 ActiveCell 中(无论哪个恰好是),然后将 oneDate 设置为 E2

我不完全知道你希望实现什么,但你似乎可以通过

实现你所说的
weekNumber = datepart("ww", Range("E2"))

只要 E2 中的内容实际上是 Excel 识别为日期的日期序列号,而不是看起来像日期的简单文本(重要区别)

如果weekNumber还是不对,试试

weekNumber = datepart("ww",date)

这将获取当前周数,这意味着就 Excel 而言,E2 并不是真正的日期