在VBA宏中使用日期变量?

时间:2018-01-05 13:44:38

标签: excel vba excel-vba

我正在尝试在宏中使用日期变量,其中我有一个日期作为输入,我想计算它的日期数。这是一段代码:

Dim ntf as Date


'#An example of ntf is "12/10/2006  15:17:09" (properly formatted as a date)   
Sheets("myshhet").Select
ntf = Cells(2, 4)
Cells(6, 6).FormulaR1C1 = "=WEEKDAY(" & ntf & ")"

但它给了我错误

  

运行时错误' 1004'

在其中出现公式的行。)

相反,如果我使用:

Dim ntf as Long

它有效,但它给出了错误的结果。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

使用Date将日期字符串放在引号中。

Dim ntf As Date


'# An example of ntf is ntf = 12/10/2006  15:17:09 (properly formatted as a date

ntf = Sheets("sheet5").Cells(2, 4).Value
Sheets("sheet5").Cells(6, 6).Formula = "=WEEKDAY(""" & ntf & """)"

或者使用Long你需要取整数部分而不是让vba围绕数字。日期时间是小数。因此,只要你的时间大于中午,它就会转到第二天。你需要强迫它不要圆。

Dim ntf As Long


'# An example of ntf is ntf = 12/10/2006  15:17:09 (properly formatted as a date

ntf = Int(Sheets("sheet5").Cells(2, 4).Value2)
Sheets("sheet5").Cells(6, 6).Formula = "=WEEKDAY(" & ntf & ")"

或者避免所有这一切并使用双重代替:

Dim ntf As Double


'# An example of ntf is ntf = 12/10/2006  15:17:09 (properly formatted as a date

ntf = Sheets("sheet5").Cells(2, 4).Value2
Sheets("sheet5").Cells(6, 6).Formula = "=WEEKDAY(" & ntf & ")"

答案 1 :(得分:1)

问题是"错误的结果"你可能意味着它给了1而不是2等等。

这是因为默认情况下,Excel中的第一天是星期日。

如果您想要星期一的第一天,请将您的公式更改为以下内容:

Cells(6, 6).FormulaR1C1 = "=WEEKDAY(" & ntf & ",2)"

这些是返回类型:

enter image description here