Excel VBA格式函数不返回所需的日期

时间:2016-04-19 00:23:58

标签: excel vba excel-vba format datepart

我有一张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作为oneDate,将52作为weekNumber。

没有第三行(甚至没有第一行),代码将正常工作并返回16作为weekNumber;

使用第三行(无论是否有第一行),它仍然会在12/29/1899返回。

我认为问题在于第三行的代码,但不确定它是什么。有人知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

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

我完全不知道你希望实现的目标,但似乎你可以通过

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

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

如果weekNumber仍然错误,请尝试

weekNumber = datepart("ww",date)

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

答案 1 :(得分:0)

也许:

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

enter image description here