为单元格分配变量而不删除其原始内容

时间:2009-04-29 12:33:25

标签: excel-vba excel vba

我在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”

的单元格的内容

2 个答案:

答案 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