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 并不是真正的日期
我有一个 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 并不是真正的日期