2017-04-19 1 views
0

J'utilise le code vba suivant pour appliquer une mise en forme conditionnelle.Vba appliquer la mise en forme conditionnelle limite supérieure/inférieure uniquement?

Sub ResetConditions() 
    With Worksheets(1).Range("A9:P1048576") 
     .FormatConditions.Add Type:=xlExpression, Formula1:= _ 
      "=ROW(B9)=ROW(OFFSET($B$9,COUNTA($B:$B)-2,0))" 
     With .FormatConditions(.FormatConditions.Count) 
      .SetFirstPriority 

      With .Borders 
      .LineStyle = xlContinuous 
      .Weight = xlThin 
      .Color = vbRed 
      End With 

     End With 
    End With 
End Sub 

La frontière est montrant comme ceci:

enter image description here

Mais je veux que ça ressemble à ceci:

enter image description here

Je suis en train de mettre uniquement en haut/bas frontières comme suit:

Sub ResetConditions() 
     With Worksheets(1).Range("A9:P1048576") 
      .FormatConditions.Add Type:=xlExpression, Formula1:= _ 
       "=ROW(B9)=ROW(OFFSET($B$9,COUNTA($B:$B)-2,0))" 
      With .FormatConditions(.FormatConditions.Count) 
       .SetFirstPriority 

       With .Borders(xlEdgeTop) 
       .LineStyle = xlContinuous 
       .Weight = xlThin 
       .Color = vbRed 
       End With 

      End With 
     End With 
    End Sub 

Mais je continue d'obtenir une erreur impossible de définir la propriété linestyle de la classe de bordure.

S'il vous plaît quelqu'un peut-il me montrer où je vais mal?

+0

Essayez d'enregistrer une macro lors de la configuration de mise en forme conditionnelle à l'aide supérieure format de bordure. Vous verrez, que 'Excel' utilisera' .Borders (xlTop) 'au lieu de' .Borders (xlEdgeTop) '. Donc, probablement [Borders Object] (https://msdn.microsoft.com/en-us/library/office/ff837809.aspx) pour les plages diffère de la collection 'Borders' de [FormatCondition.Borders] (https: // msdn. microsoft.com/en-us/library/office/ff196030.aspx) de cette manière non documentée. –

Répondre

0

Essayez comme ça ...

Sub ResetConditions() 
    Dim ws As Worksheet 
    Dim Rng As Range 
    Dim n As Integer 
    Set ws = Sheets(1) 
    Set Rng = ws.Range("A9:P1048576") 

    Rng.FormatConditions.Add Type:=xlExpression, Formula1:= _ 
     "=ROW(B9)=ROW(OFFSET($B$9,COUNTA($B:$B)-2,0))" 
    n = Rng.FormatConditions.Count 
    Rng.FormatConditions(n).SetFirstPriority 
    With Rng.FormatConditions(n).Borders(xlTop) 
     .LineStyle = xlContinuous 
     .Weight = xlThin 
     .Color = vbRed 
    End With 
    With Rng.FormatConditions(n).Borders(xlBottom) 
     .LineStyle = xlContinuous 
     .Weight = xlThin 
     .Color = vbRed 
    End With 
End Sub 
0

C'est ce que j'utilise pour les gammes de frontière:

Public Sub BorderMe(my_range) 

    Dim l_counter As Long 

    For l_counter = 7 To 10 '7 to 10 are the magic numbers for xlEdgeLeft etc 
     With my_range.Borders(l_counter) 
      .LineStyle = xlContinuous 
      .Weight = xlMedium 
     End With 
    Next l_counter 

End Sub 

Vous pouvez modifier la couleur, le poids, le style et etc. La magie ist que 7,8,9 et 10 sont les numéros d'Excel pour xlEdgeLeft, xlEdgeRight, xlEdgeTop et xlEdgeBottom.

Exécutez-le comme ceci: call borderme(selection) dans la fenêtre immédiate, pour voir ce que fait.

0
Rng.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ 
    Formula1:="=10" 
Rng.FormatConditions(Rng.FormatConditions.Count).SetFirstPriority 
With Rng.FormatConditions(Rng.FormatConditions.Count).Borders(xlTop) 
    .LineStyle = xlContinuous 
    .TintAndShade = 0 
    .Weight = xlThin 
    .Color = vbRed 
End With 
With Rng.FormatConditions(Rng.FormatConditions.Count).Borders(xlBottom) 
    .LineStyle = xlContinuous 
    .TintAndShade = 0 
    .Weight = xlThin 
    .Color = vbRed 
End With 

Essayez ce code ne pas oublier de mettre rng Set Rng = Range ("")