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 "

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top