2017-04-19 2 views
0

Ich verwende den folgenden VBA-Code, um bedingte Formatierung anzuwenden.Vba nur bedingte Formatierung Ober-/Unterrand anwenden?

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 

Die Grenze ist, da dies zeigt:

enter image description here

Aber ich will es so aussehen:

enter image description here

Ich versuche nur oben/unten eingestellt Grenzen wie folgt:

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 

Aber ich bekomme immer einen Fehler beim Festlegen der Linestyle-Eigenschaft der Border-Klasse.

Kann mir bitte jemand zeigen, wo ich falsch liege?

+0

Versuchen Sie, eine Makroaufnahme, während die bedingte Formatierung Einstellung oben mit Rahmenformat Sie werden sehen, dass 'Excel' selbst' .Borders (xlTop) 'anstelle von' .Borders (xlEdgeTop) 'verwendet. Also wahrscheinlich [Borders Objekt] (https://msdn.microsoft.com/en-us/library/office/ff837809.aspx) für Bereiche unterscheidet sich von 'Borders' Sammlung von [FormatCondition.Borders] (https: // msdn. microsoft.com/en-us/library/office/ff196030.aspx) auf diese nicht dokumentierte Weise. –

Antwort

0

es so probieren ...

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

Dies ist ich, was für die Grenzbereiche:

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 

Sie die Farbe bearbeiten können, um das Gewicht, Art und usw. Die Magie ist, dass 7,8,9 und 10 die Zahlen von Excel sind für xlEdgeLeft, xlEdgeRight, xlEdgeTop und xlEdgeBottom.

Führen Sie es so: call borderme(selection) im unmittelbaren Fenster, um zu sehen, was ist.

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 

diesen Code Versuchen Sie vergessen Sie nicht Set RNG = Range gesetzt rng ("")

Verwandte Themen