Question

Je suis en train de mettre en place une VBA dans Excel pour comparer deux dates pour voir si elles sont identiques. Le problème que j'ai, c'est qu'après avoir affecté la variable de la cellule à "ActualStartDate", tout est supprimé de la cellule. So " ActualStartDate " est assigné correctement, mais supprimé en même temps.

Voici mon code, toute aide serait fantastique. (ce genre de choses est parce qu’il s’agit de références relatives)

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

Lorsqu’il est lancé, il reconnaît que mes dates de test sont identiques et colorie la cellule. Il supprime simplement le contenu de la cellule contenant "ActualStartDate"

.
Était-ce utile?

La solution

Tout ce que vous faites est de déplacer une cellule vers le haut, une cellule vers la gauche, et de remplacer la valeur de cette cellule par rien.

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

Vous créez la variable ActualStartDate, mais vous ne lui affectez jamais rien. Par conséquent, lorsque vous appliquez la valeur des variables ActualStartDate à une cellule, celle-ci "supprime". la date existante.

Vous voudrez probablement faire quelque chose de plus, même si je ne suis pas sûr des compensations, car je ne sais pas comment vous avez conçu votre feuille de calcul.

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

Autres conseils

Il est inutile de sélectionner les cellules avant de modifier leur valeur, et FormulaR1C1 est superflu, de même que vous n'entrez pas de plage dans la formule. Ce qui suit devrait faire exactement la même chose, mais je pense qu'il est plus facile à suivre et à déboguer.

  

** Même remarque que Jim au sujet des compensations, elles ont l’air un peu bizarre, mais pourraient être ce à quoi on s’attend **

    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

Déclarer explicitement le type de vos variables comme Date est également une bonne idée, car elles sont stockées de manière interne en tant que type de données Variant qui nécessitent plus de mémoire et peuvent conduire à conséquences inattendues car Excel se voit confier la responsabilité de décider comment traiter les données.


    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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top