online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon snailhouse vom 12.03.2021, 18:58 Options

Excel VBA: Bedingte Formatierung

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    [b]<< hier tritt der Fehler auf[/b]
    .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


Antwort schreiben

Antwort 1 von snailhouse vom 12.03.2021, 19:00 Options

...das

# 8 2 2 0 ; &

hat sich irgendwie eingeschlichen und gehört nicht zum Code, nach dem & folgt direkt GrenzWertAlsNamej

Antwort 2 von Marie vom 15.03.2021, 17:00 Options

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

Antwort 3 von snailhouse vom 15.03.2021, 20:38 Options

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

Antwort 4 von snailhouse vom 19.03.2021, 19:52 Options

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 = "[b]=Zählenwenn[/b](" & oWS.Range(Cells(lZeilenZaehler, iErsteSpalteDieserGruppe), Cells(lZeilenZaehler, iLetzteSpalteDieserGruppe)).AddressLocal & "[b];[/b]"">"" & GrenzwertAlsNameDefiniert) >0"
    .FormatConditions.Add Type:=xlExpression, Formula1:=strFormel
    .FormatConditions(1).Interior.ColorIndex = 6
End With
End Sub

Antwort 5 von snailhouse vom 19.03.2021, 19:54 Options

..jetzts hat's wohl die Formatierung nicht übernommen.., weil der Absatz als "Code" definiert war?


Also: das

und



einfach weglassen..

Antwort 6 von snailhouse vom 19.03.2021, 19:54 Options

2ter Versuch

Also: das
[ b ]
und
[ / b ]


einfach weglassen..

Antwort 7 von Xpl0iT vom 16.04.2021, 10:59 Options

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

Antwort 8 von Xpl0iT vom 16.04.2021, 11:01 Options

ach ja die variable name nicht verwenden sie ist von office reserviert

Ähnliche Themen

Hlife zu Excel->VBA
majoplinka  06.11.2007 - 76 Hits - 2 Antworten

Excel VBA
drphilgonzo  17.01.2008 - 33 Hits - 1 Antwort

Hlife zu Excel / VBA
majoplinka  06.02.2008 - 62 Hits - 15 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026