Zuweisen einer Zelle eine Variable zu löschen, ohne seinen ursprünglichen Inhalt
Frage
Ich gründe eine VBA in Excel bis zu zwei Daten zu vergleichen, um zu sehen, ob sie die gleichen sind. Das Problem, das ich habe, ist, dass nach der Zelle Variablen zugewiesen zu „ActualStartDate“, es alles aus der Zelle löscht. So „ActualStartDate“ korrekt zugewiesen, aber zur gleichen Zeit gelöscht.
Hier ist mein Code, jede mögliche Hilfe wäre fantastisch. (Das Active Zeug ist, weil es alle relativen Referenzen ist)
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
Wenn es läuft, ist es meine Testdaten recogize die gleiche und Farbe der Zelle zu sein. Es löscht nur den Inhalt der Zelle, die „ActualStartDate“
enthältLösung
All dies tut, bewegt sich eine Zelle nach oben, eine Zelle auf der linken Seite, und dieser Zelle den Wert mit nichts zu ersetzen.
Dim ActualStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate
Sie erstellen die ActualStartDate Variable, aber nie etwas zuweisen. Also, wenn Sie den ActualStartDate Variablen Wert auf eine Zelle anwenden, es „löscht“ das vorhandene Datum.
Sie wollen wahrscheinlich etwas mehr wie dies tun, auch wenn ich über die Versätze bin nicht sicher, weil ich weiß nicht, wie Sie Ihre Tabelle entworfen haben.
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
Andere Tipps
Sie die Zellen auswählen, bevor ihr Wert zu ändern ist nicht erforderlich, und FormulaR1C1
ist überflüssig aswell wie Sie keinen Bereich in der Formel eingeben. Die folgende Beschreibung ist genau das gleiche tun, aber ich denke, leichter zu verfolgen und zu debuggen.
** Samt Vorbehalt Jim über die Offsets, sie sehen ein wenig seltsam, aber könnte das sein, was soll **
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
erklärt Explizit den Typ Ihrer Variablen als Date
auch eine gute Idee ist, da sie sonst intern als Variant
Datentyp gespeichert sind, die mehr Speicher benötigen und zu unerwarteten Folgen führen können als Excel mit der Verantwortung für die Entscheidung überlassen, wie zur Behandlung von die Daten.
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