在VBA中使用Excel公式中的datevariables

我试图find两个date之间的日子。 例如在C2单元中,我有1/1/2014,在C3中有12/31/2014。 如果我在C4中使用DATEDIF公式,我会得到364天的正确答案。 不过,我试图在macros中只使用variables。 目前我有:

Sub dates() Dim NumDays As Integer Dim StartDate, EndDate As Date StartDate = Cells(2, 3) EndDate = Cells(3, 3) Range("C4").FormulaR1C1 = "=DATEDIF('" & StartDate & "','" & EndDate & "',""d"")" End sub 

这给了我错误:“运行时错误'1004':应用程序定义的或对象定义的错误”

任何想法如何我可以解决这个问题? 谢谢。

这是date值附近的引号。 删除单引号,并将它们视为适当的date值。 从本质上讲,#1/1/2014#与function上的“#1/1/2014##”不一样。

 Sub dates() Dim NumDays As Integer Dim StartDate as Date, EndDate As Date StartDate = Cells(2, 3) EndDate = Cells(3, 3) Range("C4").FormulaR1C1 = "=DATEDIF(" & StartDate & "," & EndDate & ",""d"")" End sub 

DATEDIF()的使用实际上是不鼓励的,因为它是一个旧公式。 相反,在vba中内置了一个DateDiff函数。 你会做什么,而不是:

 Range("C4").Value = DateDiff("d", StartDate, EndDate) 

这里是DateDiff函数的解释。 我build议你阅读它。

我认为这将做你想要的。

 Sub dates() Dim NumDays As Integer Dim StartDate, EndDate As Date StartDate = Cells(2, 3) EndDate = Cells(3, 3) NumDays = EndDate - StartDate Range("C4").Value = NumDays End Sub 

您正在使用.FormulaR1C1属性。 如果你切换到.Formula属性,它应该工作。