Excel 如何在VBA中将日期作为变量放入公式中?

Excel 如何在VBA中将日期作为变量放入公式中?,excel,vba,formula,Excel,Vba,Formula,在代码中,日期是100%正确的。当它进入形式时,它会出现1/0/1900 在VBA中使用公式时,这似乎是一个问题 TestDate = DateAdd("m", 1, "9/1/2018") ActiveCell = TestDate 'output: 10/1/2018 ActiveCell.Offset(1).FormulaR1C1 = "=" & TestDate & "" 'output: 1/0/1900 ActiveCell.Offset(2).Formula = "

在代码中,日期是100%正确的。当它进入形式时,它会出现1/0/1900

在VBA中使用公式时,这似乎是一个问题

TestDate = DateAdd("m", 1, "9/1/2018")
ActiveCell = TestDate 'output: 10/1/2018
ActiveCell.Offset(1).FormulaR1C1 = "=" & TestDate & "" 'output: 1/0/1900
ActiveCell.Offset(2).Formula = "=" & TestDate & "" 'output: 1/0/1900

这就是当你把日期和字符串混在一起时会发生的事情。。TestDate不是作为日期存储的,而是作为字符串9/1/2018存储的。当使用第三行ActiveCell.Offset1.FormulaR1C1=&TestDate&'output:1/0/1900将此字符串粘贴到单元格中时,输出为=9/1/2018 0.00445986115。在内部,第0天是1900年1月1日。您必须将TestDate字符串转换为日期。

混合使用日期和字符串时会发生这种情况。。TestDate不是作为日期存储的,而是作为字符串9/1/2018存储的。当使用第三行ActiveCell.Offset1.FormulaR1C1=&TestDate&'output:1/0/1900将此字符串粘贴到单元格中时,输出为=9/1/2018 0.00445986115。在内部,第0天是1900年1月1日。您必须将TestDate字符串转换为日期。

引号通常是公式中的难题。我不知道你的目标是什么,但这些版本有效:

    ActiveCell.Offset(1).FormulaR1C1 = "=""" & TestDate & """" 'output: ="10/1/2018"
    ActiveCell.Offset(2).Formula = "=""" & TestDate & """" 'output: ="10/1/2018"
    ActiveCell.Offset(3).FormulaR1C1 = TestDate 'output: 10/1/2018
    ActiveCell.Offset(4).Formula = TestDate 'output: 10/1/2018

这是官方的帮助。

引号通常是公式中的一个难点。我不知道你的目标是什么,但这些版本有效:

    ActiveCell.Offset(1).FormulaR1C1 = "=""" & TestDate & """" 'output: ="10/1/2018"
    ActiveCell.Offset(2).Formula = "=""" & TestDate & """" 'output: ="10/1/2018"
    ActiveCell.Offset(3).FormulaR1C1 = TestDate 'output: 10/1/2018
    ActiveCell.Offset(4).Formula = TestDate 'output: 10/1/2018

这是官方的帮助,.

啊-明白了…我能让它工作的唯一方法是做以下事情。希望这对你有用

Public Sub Test()

Dim formula As String

ThisWorkbook.ActiveSheet.Cells(1, 1).Select
TestDate = DateAdd("m", 1, "9/1/2018")
ActiveCell = TestDate
formula = "=Date(" + CStr(Year(TestDate)) + "," + CStr(Month(TestDate)) + "," + CStr(Day(TestDate)) + ")"
ActiveCell.Offset(1).FormulaR1C1 = formula
ActiveCell.Offset(2).formula = formula

End Sub

啊-明白了…我能让它工作的唯一方法是做以下事情。希望这对你有用

Public Sub Test()

Dim formula As String

ThisWorkbook.ActiveSheet.Cells(1, 1).Select
TestDate = DateAdd("m", 1, "9/1/2018")
ActiveCell = TestDate
formula = "=Date(" + CStr(Year(TestDate)) + "," + CStr(Month(TestDate)) + "," + CStr(Day(TestDate)) + ")"
ActiveCell.Offset(1).FormulaR1C1 = formula
ActiveCell.Offset(2).formula = formula

End Sub

必须在字符串周围加上双引号;e、 g.=&TestDate&必须在字符串周围加上双引号;e、 g.=&TestDate&这是最好的答案,它向OP展示了如何解决问题并提供了一个链接来解释原因。这是最好的答案,它向OP展示了如何解决问题并提供了一个链接来解释原因。感谢您的回复!我创建了一个声明,并将其设置为一个日期,然而,问题仍在继续。另一篇文章指出我遗漏了第三组引号。。。这就解决了问题。谢谢你的回复!我创建了一个声明,并将其设置为一个日期,然而,问题仍在继续。另一篇文章指出我遗漏了第三组引号。。。这就解决了。谢谢你的回复!它需要=使它成为一个公式,在这个例子中它不重要,但在更大的方程中它是重要的。不客气!我刚刚更新了帖子-看看这是否适合你。谢谢你的回复!它需要=使它成为一个公式,在这个例子中它不重要,但在更大的方程中它是重要的。不客气!我刚刚更新了帖子,看看这是否适合你。