Zuweisen einer Zelle eine Variable zu löschen, ohne seinen ursprünglichen Inhalt

StackOverflow https://stackoverflow.com/questions/802139

  •  03-07-2019
  •  | 
  •  

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ält
War es hilfreich?

Lö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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top