在VBA宏中使用日期变量?

在VBA宏中使用日期变量?,vba,excel,Vba,Excel,我试图在宏中使用一个日期变量,其中我有一个日期作为输入,我想计算它的天数。下面是一段代码: 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 & ")" 但它给了

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

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
它是有效的,但它给出了一个错误的结果

我做错了什么?

问题是,在“错误结果”下,您可能意味着它给出的是1,而不是2等等

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

如果您希望第一天是星期一,请将公式更改为以下公式:

Cells(6, 6).FormulaR1C1 = "=WEEKDAY(" & ntf & ",2)"
以下是退货类型:


要使用日期,请将日期字符串置于引号中

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 & ")"

它给了你什么错误?在哪一行?当您单步通过ntf时,它的值是多少@braX我编辑了我的问题,我希望它能更清楚地理解。尝试
ntf=Cells(2,4)。Value2
No它返回2006年11月12日而不是10月12日/2006@ScottCraner-
WEEKDAY()
应该返回1到7,基于工作日?返回长的
39062
,当格式化为短日期时返回12/11而不是12/10。至少在我的电脑上。我在讲工作日公式中的日期。@ScottCraner你完美地解释了它发生在我身上的原因。我想知道的一件事是,为什么OP不手动将公式键入单元格,或者如果它只是他们要找的值,为什么不使用
Sheet1.Cells(6,6)=工作日(INT(Sheet1.Cells(2,4))(星期一)
@DarrenBartrup-Cook我猜这是问题所在的一个简化示例。但是,如果您直接引用工作表公式中地址为
的单元格,则不需要
INT
。@ScottCraner对简化代码的看法很好。如果时间在正午之前或之后,我在我的评论中看不到代码中的
INT
有任何区别,但将其留在那里是因为。。。。。嗯,真的不知道。只有转换为long时才需要int。如果OP将它转换为双精度,那么它就不需要整数。要编辑我的答案来添加它@DarrenBartrup CookYep,这很有道理。