2

Der Versuch, eine bedingte Formatierung über VBA auf eine Tabelle anzuwenden, die über 25.000 Zeilen verfügt. Es gibt keine letzte Spalte oder letzte Zeile, so dass es aus irgendeinem Grund schwierig ist, den unten stehenden Code anzuwenden. Wenn ich die Zustandsformatierung für jede Zeile überprüfe, verweist sie ständig auf Zeile 3. Wenn ich RC setzen“& LASTCOL +3 &‚= FALSE‘erkennt dies als Zelle RC25 zum Beispiel:.Bedingte Formatierung mit xlR1C1-Formel

Range(Cells(3, FoundCol), Cells(lastrowRecon, FoundCol)).Select 
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=R[]C" & lastCol + 3 & "=FALSE" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 255 
     .TintAndShade = 0 
    End With 

Antwort

1

Wenn prüfe ich den Zustand in jeder Zeile Formatierung verweis hält 3 die ganze Zeit zu bringen ... Wenn ich setzen RC“& LASTCOL 3 &‚= FALSE‘es recogni ses dies als Zelle RC25 zum Beispiel

RC25 ist ein xlA1-Stil Zellreferenz. Es ist die 25. Reihe in der Spalte RC.

Sie können eine xlR1C1-Formel nicht in eine Bedingte Formatierungsregel einfügen, wenn Application.ReferenceStyle xlA1 ist; Umgekehrt können Sie keine xlA1-Stilformel in ein System einfügen, das derzeit einen xlR1C1-Formelstil verwendet. Es ist jedoch einfach, zwischen den beiden zu wechseln oder Application.ConvertFormula zu verwenden, um die Formel für Sie zu wechseln. Für die Methode .FormatConditions.Add gibt es keinen Formula1R1C1-Parameter.

Ich denke, Ihre xlR1C1 Formel wäre besser als "=NOT(RC" & (lastCol + 3) & ")".

Sub wqewqwew() 
    Dim lastCol As Long, xlA1formula As String 
    lastCol = 22 
    With Selection 
     .FormatConditions.Delete 
     Application.ReferenceStyle = xlA1 
     'when Application.ReferenceStyle = xlA1 
     xlA1formula = Application.ConvertFormula("=NOT(RC" & (lastCol + 3) & ")", xlR1C1, xlA1, , .Cells(1)) 
     With .FormatConditions.Add(Type:=xlExpression, Formula1:=xlA1formula) 
      .Interior.Color = 255 
      .SetFirstPriority 
     End With 

     .FormatConditions.Delete 
     Application.ReferenceStyle = xlR1C1 
     'when Application.ReferenceStyle = xlR1C1 
     With .FormatConditions.Add(Type:=xlExpression, Formula1:="=NOT(RC" & (lastCol + 3) & ")") 
      .Interior.Color = 255 
      .SetFirstPriority 
     End With 

     'switch back 
     Application.ReferenceStyle = xlA1 
    End With 
End Sub 
+0

In R1C1 Stil RC25 bedeutet Spalte Y mit der Formel Zellenzeile. Wenn Sie also = RC25 in A1 eingeben, bedeutet das in xlA1-Stil, dass es $ Y1 entspricht. – sktneer

+0

@sktneer - Nur wenn 'Application.ReferenceStyle = xlR1C1'. Wenn 'Application.ReferenceStyle = xlA1', dann bedeutet' = RC25' die 471ste Spalte, Zeile 25. – Jeeped

+0

Ja, absolut richtig. Ich sprach nur mit der Referenz des Fragetitels. – sktneer

0

LASTCOL wurde kein Wert zugewiesen, so dass es immer Null sein wird

ebenfalls mit lastrowrecon und FoundCol

+0

Hallo, ja ich habe das im Code weiter oben. Die Bedingungsformel nimmt die richtige Spalte auf. Probleme mit der Zeile haben. Unten ist der Code, den ich verwendet habe, um lastCol zu erhalten: lastCol = ActiveSheet.Cells (2, Columns.Count) .End (xlToLeft) .Column – Conor

+0

Und die Werte sind? –

+0

lastCol = 25 in diesem Fall – Conor