6.4k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von snailhouse Mitglied (179 Punkte)
Hallo zusammen,
 
ich möchte per VBA eine bedingte Formatierung eintragen und zwar in Form einer Formel
 
Die bedingte Formatierung soll nach folgendem Muster erfolgen:
 

Formel ist = Zählenwenn(A1:A10;“>“&GrenzWertAlsName)>0

d.h. Wenn es in dem angegebenen Bereich Werte gibt, die größer sind als ein als "Name" definierter Wert dann greift diese bedingte Formatierung.
 
Versucht habe ich es folgendermaßen, leider bekomme ich hiermit aber einen "Laufzeitfehler 5: ungültiger Prozeduraufruf oder ungültiges Argument"
 

With T_Tabelle.Range(Cells(lZeilenZaehler, iErsteSpalteDieserGruppe - 1), Cells(lZeilenZaehler, iErsteSpalteDieserGruppe - 1))
    .FormatConditions.Delete
    strFormel = "=COUNTIF(" & T_Tabelle.Range(Cells(lZeilenZaehler, iErsteSpalteDieserGruppe), Cells(lZeilenZaehler, iLetzteSpalteDieserGruppe)).AddressLocal & ","">""&GrenzwertAlsNameDefiniert)>0"
    .FormatConditions.Add Type:=xlExpression, Formula1:=strFormel    << hier tritt der Fehler auf
    .FormatConditions(1).Interior.ColorIndex = 3
End With


Ich habe auch schon versucht, das & als chr(38) einzufügen, hat aber leider auch nicht geklappt..

Wo liegt mein Fehler?

Für Eure Mühe im voraus vielen Dank!

Gruß
Jürgen

8 Antworten

0 Punkte
Beantwortet von snailhouse Mitglied (179 Punkte)
...das

# 8 2 2 0 ; &

hat sich irgendwie eingeschlichen und gehört nicht zum Code, nach dem & folgt direkt GrenzWertAlsNamej
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Ich hab jetzt nicht wirklich Verstanden wie deine Formel heißen soll, weil Du Dich dauernd verschreibst.
Aber wenn ich =ZÄHLENWENN(A1:A10;&GrenzwertalsName)>0 eingebe, dann bekomme ich hier schon eine Fehlermeldung

Ferner poste mal die ganze lauffähige Sub oder Funktion, so dass man Deinen Code nachvollziehen kann. (alles Unwichtige kannste weglassen, aber Dimanweisungen oder sowas wären nötig zum Ausprobieren)

Gruß marie
0 Punkte
Beantwortet von snailhouse Mitglied (179 Punkte)
Hallo Marie,

ich habe mal ein Makro inklusive der Formel aufgezeichnet, das veranschaulicht, was ich eigentlich umsetzen möchte.


Sub BedingteFormatierungTest()
Range("A1").Select
ActiveCell.FormulaR1C1 = "Grenzwert definieren"
Range("A2").Select
ActiveCell.FormulaR1C1 = "4"
Range("A2").Select
ActiveWorkbook.Names.Add Name:="MeinGrenzwert", RefersToR1C1:="=Tabelle1!R2C1"
Range("B4").Select
ActiveCell.FormulaR1C1 = "Listenwerte"
Range("B5").Select
ActiveCell.FormulaR1C1 = "1"
Range("C5").Select
ActiveCell.FormulaR1C1 = "2"
Range("B5:C5").Select
Selection.AutoFill Destination:=Range("B5:F5"), Type:=xlFillDefault
Range("B5:F5").Select
Range("A4").Select
ActiveCell.FormulaR1C1 = "Bedingte Formatierung für A4"
Range("A5").Select
Columns("A:A").EntireColumn.AutoFit
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ZÄHLENWENN($B$5:$F$5;"">""&MeinGrenzwert)>0"
Selection.FormatConditions(1).Interior.ColorIndex = 6
End Sub


Die Formel sieht im Formular f.d. bedingte Formatierung so aus:

[Formel ist][gleich] [=ZÄHLENWENN($B$5:$F$5;">"&MeinGrenzwert)>0]


Mein Code auf dieses Beispiel umgeschrieben (gleiche Zellen) würde dann so aussehen:

Public Sub BedingteFormatierungTest2()
Dim oWS As Worksheet
' dieser Codeschnipsel setzt voraus, dass in dem Tabellenblatt bereits eine Zelle mit Name "GrenzwertAlsNameDefiniert" versehen wurde.
' das strFormel habe ich nur separat definiert, damit es ein bisschen übersichtlicher wird..
Set oWS = ThisWorkbook.Worksheets("Tabelle1")
Dim lZeilenZaehler As Long
Dim iErsteSpalteDieserGruppe As Integer
Dim iLetzteSpalteDieserGruppe As Integer
Dim strFormel As String

lZeilenZaehler = 5
iErsteSpalteDieserGruppe = 2
iLetzteSpalteDieserGruppe = 6

With oWS.Range(Cells(lZeilenZaehler, iErsteSpalteDieserGruppe - 1), Cells(lZeilenZaehler, iErsteSpalteDieserGruppe - 1))
.FormatConditions.Delete
strFormel = "=COUNTIF(" & oWS.Range(Cells(lZeilenZaehler, iErsteSpalteDieserGruppe), Cells(lZeilenZaehler, iLetzteSpalteDieserGruppe)).AddressLocal & ","">""&GrenzwertAlsNameDefiniert)>0"
.FormatConditions.Add Type:=xlExpression, Formula1:=strFormel
.FormatConditions(1).Interior.ColorIndex = 6
End With
End Sub


Im voraus schon 'mal Danke!

Gruß
Jürgen
0 Punkte
Beantwortet von snailhouse Mitglied (179 Punkte)
Hallo zusammen,

ein Bekannter konnte mir nun bei meinem Problem weiterhelfen.

Hier die notwendigen Änderungen, vielleicht kann's ja jemand mal brauchen
:
=Zählenwenn anstatt =Countif
Strichpunkt vor dem > anstatt eines Kommas.


Public Sub BedingteFormatierungTest2()
Dim oWS As Worksheet
' dieser Codeschnipsel setzt voraus, dass in dem Tabellenblatt bereits eine Zelle mit Name "GrenzwertAlsNameDefiniert" versehen wurde.
' das strFormel habe ich nur separat definiert, damit es ein bisschen übersichtlicher wird..
Set oWS = ThisWorkbook.Worksheets("Tabelle1")
Dim lZeilenZaehler As Long
Dim iErsteSpalteDieserGruppe As Integer
Dim iLetzteSpalteDieserGruppe As Integer
Dim strFormel As String

lZeilenZaehler = 5
iErsteSpalteDieserGruppe = 2
iLetzteSpalteDieserGruppe = 6

With oWS.Range(Cells(lZeilenZaehler, iErsteSpalteDieserGruppe - 1), Cells(lZeilenZaehler, iErsteSpalteDieserGruppe - 1))
.FormatConditions.Delete
strFormel = "=Zählenwenn(" & oWS.Range(Cells(lZeilenZaehler, iErsteSpalteDieserGruppe), Cells(lZeilenZaehler, iLetzteSpalteDieserGruppe)).AddressLocal & ";"">"" & GrenzwertAlsNameDefiniert) >0"
.FormatConditions.Add Type:=xlExpression, Formula1:=strFormel
.FormatConditions(1).Interior.ColorIndex = 6
End With
End Sub
0 Punkte
Beantwortet von snailhouse Mitglied (179 Punkte)
..jetzts hat's wohl die Formatierung nicht übernommen.., weil der Absatz als "Code" definiert war?

[code]
Also: das

und

[code]

einfach weglassen..
0 Punkte
Beantwortet von snailhouse Mitglied (179 Punkte)
2ter Versuch

Also: das
[ b ]
und
[ / b ]


einfach weglassen..
0 Punkte
Beantwortet von xpl0it Einsteiger_in (25 Punkte)
so wenn ich es richtig verstanden habe

Sub formatierung()

i = 0

Do While i = 0
Name = Cells(3, 5).Value 'Irgend eine reservierte Spalte wo der Wert definiert wird
' cells(2,2).activate oder Relativ

If Name < ActiveCell.Value Then
' Zelle formatieren
Else
End If
DoEvents
Loop

'Do while aber nur wenn eine einzige zelle ohne activate abgefragt wird

End Sub
0 Punkte
Beantwortet von xpl0it Einsteiger_in (25 Punkte)
ach ja die variable name nicht verwenden sie ist von office reserviert
...