我在excel中设置一些VBA来比较两个日期,看看它们是否相同。我遇到的问题是,在将单元格的变量分配给“ActualStartDate”后,它会从单元格中删除所有内容。因此,“ActualStartDate”被正确分配,但同时被删除。
这是我的代码,任何帮助都会很棒。 (这个activecell的东西是因为它都是相对的引用)
Dim ActualStartDate, ProjectedStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = ProjectedStartDate
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Range("A1").Interior.Color = RGB(0, 0, 255)
End If
当它运行时,它会重新确定我的测试日期是相同的并为单元格着色。它只删除包含“ActualStartDate”
的单元格的内容答案 0 :(得分:1)
所有这一切都是向上移动一个单元格,向左移动一个单元格,并用零替换该单元格的值。
Dim ActualStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate
您创建ActualStartDate变量,但从不为其分配任何内容。因此,当您将ActualStartDate变量值应用于单元格时,它会“删除”现有日期。
您可能想要做更多类似的事情,但我不确定偏移量,因为我不知道您是如何设计电子表格的。
Sub Button1_Click()
Dim ActualStartDate, ProjectedStartDate
ActiveCell.Offset(-1, -1).Select
ActualStartDate = ActiveCell.FormulaR1C1
ActiveCell.Offset(1, 0).Select
ProjectedStartDate = ActiveCell.FormulaR1C1
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
End If
End Sub
答案 1 :(得分:0)
在更改值之前选择单元格是不必要的,FormulaR1C1
是多余的,并且您没有在公式中输入范围。以下应该完全相同,但我认为更容易遵循和调试。
**与吉姆关于抵消的注意事项相同,他们看起来有点奇怪,但可能是预期的**
Dim ActualStartDate, ProjectedStartDate
ActualStartDate = ActiveCell.Offset(-1, -1)
ProjectedStartDate = ActiveCell.Offset(1, 0)
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
End If
明确地将变量的类型声明为Date
也是一个好主意,因为它们在内部存储为Variant
数据类型,这需要更多内存,并且可能会导致意外后果,因为Excel仍然存在负责决定如何处理数据。
Dim ActualStartDate as Date
Dim ProjectedStartDate as Date
ActualStartDate = ActiveCell.Offset(-1, -1)
ProjectedStartDate = ActiveCell.Offset(1, 0)
If ActualStartDate = ProjectedStartDate Then
ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
End If