Domanda

Sto impostando alcuni VBA in Excel per confrontare due date per vedere se sono uguali. Il problema che sto riscontrando è che dopo aver assegnato la variabile della cella a "ActualStartDate", elimina tutto dalla cella. Quindi " ActualStartDate " è assegnato correttamente, ma eliminato allo stesso tempo.

Ecco il mio codice, qualsiasi aiuto sarebbe fantastico. (questa roba di activecell è perché sono tutti riferimenti relativi)

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

Quando viene eseguito, riconosce le mie date del test come uguali e colora la cella. Elimina semplicemente il contenuto della cella che contiene " ActualStartDate "

È stato utile?

Soluzione

Tutto ciò che sta facendo è spostare una cella in alto, una cella a sinistra e sostituire il valore di quella cella con nulla.

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

Si crea la variabile ActualStartDate, ma non si assegna mai nulla ad essa. Pertanto, quando applichi il valore delle variabili ActualStartDate a una cella, "elimina" la data esistente.

Probabilmente vuoi fare qualcosa di più simile a questo, anche se non sono sicuro degli offset perché non so come hai progettato il tuo foglio di calcolo.

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

Altri suggerimenti

La selezione delle celle prima di modificarne il valore non è necessaria e FormulaR1C1 è superfluo in quanto non si inserisce un intervallo nella formula. Quanto segue dovrebbe fare esattamente lo stesso, ma penso che sia più facile da seguire ed eseguire il debug.

  

** Stesso avvertimento di Jim per quanto riguarda gli offset, sembrano un po 'strani ma potrebbero essere ciò che si intende **

    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

Dichiarare esplicitamente il tipo di variabili come Date è anche una buona idea, poiché altrimenti sono archiviate internamente come tipo di dati Variant che richiedono più memoria e possono portare a conseguenze inattese in quanto Excel ha la responsabilità di decidere come trattare i dati.


    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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top