Excel VBA ajouter une bordure, si la cellule active sur certains ligne
Je suis en train d'écrire VBA pour un Diagramme de Gantt feuille de calcul.
J'ai 3 mois de dates sur la ligne 5 et je peux définir la date de début par la saisie d'une date dans une cellule qui met à jour l'ensemble de la feuille.
J'ai une plage de cellules de mon tableau L6:CZ42. Pour cette gamme, si la cellule de la ligne 5 est le 1er du mois, chaque cellule de cette colonne aura un gris parsemé de bordure gauche et rien à droite. Cela fonctionne de la façon dont je le veux.
Le problème est qu'il ajoute une bordure grise en haut et en bas de la cellule qui est OK pour les lignes 7 à 41, mais avec la ligne 6 je veux un noir au-dessus de la frontière et pour la ligne 42 je veux un fond noir de la frontière.
J'ai ajouté cette section de code d'essayer de régler ce problème, mais la syntaxe est incorrecte vérifier si il est sur la ligne 6
' If this is the first row (6) in the range then
' add a black continuous border to the top
If Cells(6, i) Then
With .Borders(xlEdgeTop)
.ColorIndex = 1
.Weight = xlThin
.LineStyle = xlContinuos
End With
End If
C'est tout mon code
Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim CuDate As Date
For i = 12 To 104
CuDate = Cells(5, i).Value
' Are we on the 1st day of the month
If Day(CuDate) = 1 Then
With Range(Cells(6, i), Cells(42, i))
' If this is the first row (6) in the range then
' add a black continuous border to the top
If Cells(6, i) Then
With .Borders(xlEdgeTop)
.ColorIndex = 1
.Weight = xlThin
.LineStyle = xlContinuos
End With
End If
With .Borders(xlEdgeLeft)
.ColorIndex = 15
.Weight = xlThin
.LineStyle = xlDot
End With
With .Borders(xlEdgeRight)
.LineStyle = xlLineStyleNone
End With
End With
Else
With Range(Cells(6, i), Cells(42, i))
' If this is the last row (42) in the range then
' add a black continuous border to the bottom
If Cells(42, i) Then
With .Borders(xlEdgeBottom)
.ColorIndex = 1
.Weight = xlThin
.LineStyle = xlContinuos
End With
End If
With .Borders(xlEdgeLeft)
.LineStyle = xlLineStyleNone
End With
With .Borders(xlEdgeRight)
.LineStyle = xlLineStyleNone
End With
End With
End If
Next
End Sub
Vous devez vous connecter pour publier un commentaire.
Cette ligne ne fait pas ce que vous pensez que cela fonctionne:
If Cells(6, i) Then
C'est équivalent à dire:
If Cells(6, i).Value = True Then
, c'est à dire "si le contenu de la cellule sur la ligne 6 et la colonnei
évalue àTrue
quand implicitement convertie en Booléen, alors", ce qui n'est clairement pas ce que vous voulez. Au lieu de cela, essayez:Le même raisonnement vaut pour les
If Cells(42, i) Then
plus loin dans votre code.[Mise à jour: Jean-François Corbett a corrigé votre code logique re: vérifier si la cellule active est dans la ligne 6. Mais avec la typo, le code ne produit pas le haut et le bas des frontières.]
Votre code ne compile pas. Veuillez prendre en considération
Option Explicit
en haut de votre code de modules. La seule façon que je pouvais reproduire votre problème a été en supprimantOption Explicit
. J'ai configuré l'Éditeur VBA, donc il place automatiquementOption Explicit
au sommet de nouveaux modules.La Propriété LineStyle doit être l'un des XlLineStyle constantes:
Dans votre code, vous avez écrit xlContinuos pas xlContinuous. Une fois que vous faites de cette correction, le code devrait fonctionner.
Aussi, c'est un point mineur, mais, techniquement, le Worksheet_Change Événement doit être déclaré comme suit:
Private Sub Worksheet_Change(ByVal Target As Range)
Mai j'ai bien vouloir vous suggérons de profiter de ses fonctionnalités de l'Éditeur VBA ainsi que la documentation d'aide?