2009-04-29 7 views
0

Ich richte VBA in Excel ein, um zwei Daten zu vergleichen, um zu sehen, ob sie identisch sind. Das Problem, das ich habe, ist, dass nach dem Zuweisen der Variablen der Zelle zu "ActualStartDate" alles aus der Zelle löscht. So wird "ActualStartDate" korrekt zugewiesen, aber gleichzeitig gelöscht.Einer Zelle eine Variable zuweisen, ohne den ursprünglichen Inhalt zu löschen

Hier ist mein Code, jede 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, tut es meine Testdaten recogize die gleiche zu sein und die Zelle zu färben. Es löscht nur den Inhalt der Zelle, die "ActualStartDate" enthält

Antwort

1

All dies macht eine Zelle nach oben, eine Zelle nach links, und ersetzt den Wert dieser Zelle durch nichts.

Dim ActualStartDate 
ActiveCell.Offset(-1, -1).Range("A1").Select 
ActiveCell.FormulaR1C1 = ActualStartDate 

Sie erstellen die Variable ActualStartDate, weisen ihr aber nie etwas zu. Wenn Sie den ActualStartDate-Variablenwert auf eine Zelle anwenden, löscht er das vorhandene Datum.

Wahrscheinlich möchten Sie etwas mehr so ​​machen, obwohl ich mir über die Offsets nicht sicher bin, weil ich nicht weiß, 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 
+0

Das macht Sinn und scheint zu funktionieren! Vielen Dank!! – Shannon

0

die Zellen auswählen, bevor ihr Wert ist nicht erforderlich, zu ändern, und FormulaR1C1 ist überflüssig aswell wie Sie nicht einen Bereich in der Formel eingeben. Folgendes sollte genau das gleiche tun, aber ich denke, es ist einfacher zu folgen 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

Explicitly declaring the type of your variables as Date ist auch eine gute Idee, da sie sonst intern als Variant gespeichert werden Datentypen, die mehr Speicher benötigen und zu unerwarteten Konsequenzen führen können, da Excel die Verantwortung für die Entscheidung über den Umgang mit den Daten hat.


    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 
Verwandte Themen