Asignando a una celda una variable sin borrar sus contenidos originales
Pregunta
Estoy configurando algunos VBA en Excel para comparar dos fechas para ver si son iguales. El problema que tengo es que después de asignar la variable de la celda a " ActualStartDate " ;, borra todo de la celda. Así que " ActualStartDate " se asigna correctamente, pero se elimina al mismo tiempo.
Aquí está mi código, cualquier ayuda sería fantástica. (esta cosa activecell es porque son todas las referencias relativas)
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
Cuando se ejecuta, reconoce que las fechas de mis pruebas son las mismas y colorea la celda. Simplemente elimina el contenido de la celda que contiene " ActualStartDate "
Solución
Todo lo que está haciendo es mover una celda hacia arriba, una celda hacia la izquierda y reemplazar el valor de esa celda por nada.
Dim ActualStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate
Crea la variable ActualStartDate, pero nunca le asigna nada. Por lo tanto, cuando aplica el valor de las variables ActualStartDate a una celda, " elimina " la fecha existente.
Probablemente quieras hacer algo más como esto, aunque no estoy seguro de las compensaciones porque no sé cómo has diseñado tu hoja de cálculo.
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
Otros consejos
No es necesario seleccionar las celdas antes de cambiar su valor, y FormulaR1C1
es superfluo, ya que no está ingresando un rango en la fórmula. Lo siguiente debería hacer exactamente lo mismo, pero creo que es más fácil de seguir y depurar.
** La misma advertencia que Jim sobre las compensaciones, se ven un poco extrañas pero podrían ser las intenciones **
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
Declarar explícitamente el tipo de sus variables como Fecha
también es una buena idea, ya que de lo contrario se almacenan internamente como tipo de datos Variant
que requieren más memoria y pueden llevar a consecuencias inesperadas, ya que Excel se queda con la responsabilidad de decidir cómo tratar los datos.
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