Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1704to1708
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variablen in Formular.Conditions

Variablen in Formular.Conditions
10.08.2019 02:10:26
Mann
Hallo
ich bin dabei mich in VBA einzuarbeiten - also Neuling.
Dieser Ausdruck wird angenommen :
.FormatConditions.Add Type:=xlExpression, Formula1:="=WENN(E4>F4;1;0)
da ich aber die Zelle E4 und F4 variabel brauche nabe ich folgenden Ausdruck versucht:
.FormatConditions.Add Type:=xlExpression, _ Formula1:="=WENN(Cells(4,selColumn2)>Cells(4,selColumn1);1;0)"
wobei selComunn1 = select.Column -1 und selComunn2 = select.Column -2 vorher berechnet werden.
Der Ausdruck mit den variablen Zellbezug wird nicht angenommen. Kann mir bitte jemand den Fehler korrigieren.
Das Ganze betrifft eine bedingte Formatierung über VBA.
Danke schon mal im voraus.
MfG
Mann

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variablen in Formular.Conditions
10.08.2019 07:37:50
Luschi
Hallo Mann,
am besten schreibst Du die Formel in eine Stringvariable, damit man sie auch testen kann:
Dim sFormel As String
sFormel = "=WENN(Cells(4, " & selColumn2 & ") > Cells(4, " & selColumn1 & ");1;0)"
Debug.Print sFormel
'oder
Msgbox sFormel
… Formula1:= sFormel
Gruß von Luschi
aus klein-Paris
AW: Variablen in Formular.Conditions
10.08.2019 07:44:33
Luschi
Hallo Mann,
am besten schreibst Du dem Formelausdruck in eine Stringvariable, damit man sie auch testen kann:
Dim sFormel As String
sFormel = "=WENN(Cells(4, " & selColumn2 & ") > Cells(4, " & selColumn1 & ");1;0)"
Debug.Print sFormel
'oder
Msgbox sFormel
… Formula1:= sFormel
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Variablen in Formular.Conditions
10.08.2019 11:29:39
Mann
Hallo
erstmal Dank für die schnelle Antwort - leider ohne Erfolg.
<pre>Sub Makro11()
Dim rgnZelle As Range
Dim rgnBereich As Range
Dim selColumn As Long
Dim selColumn1 As Long
Dim selColumn2 As Long
selColumn = Selection.Column
selColumn1 = Selection.Column - 1
selColumn2 = Selection.Column - 2
Dim sFormel As String
sFormel = "=WENN(Cells(4, " & selColumn2 & ") > Cells(4, " & selColumn1 & ");1;0)"
'Debug.Print sFormel
'oder
MsgBox sFormel
Set rgnBereich = Worksheets("Jahrges").Range(Cells(4, selColumn), Cells(15, selColumn))
With rgnBereich
For Each rgnZelle In rgnBereich
MsgBox rgnZelle.Row & "|" & rgnZelle.Column
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:=sFormel ' <b>HIER der ABBRUCH</b>
.FormatConditions(1).Interior.ColorIndex = 6
Next rgnZelle
End With
End Sub</pre>
der String sFormel ist wie folgt: "=WENN(Cells(4, 5) > Cells(4, 6);1;0)"
MfG
R.Mann
Anzeige
Eben, und der ist offensichtlich falsch, da ...
10.08.2019 12:18:20
Luc:-?
…VBA mit Xl vermischt als FmlText erzeugt wird, R.Mann;
das kann natürlich nicht fktionieren! Das wollte Luschi dir zeigen!
Die BedingtFormat-RegelFml benötigt lokale Notation und ZellAdressen, folglich müssen auch solche im FmlText erscheinen, was nicht der Fall ist!
sFormel = "=WENN(" & Cells(4, selColumn2).Address(0, 0) & ">" & Cells(4, selColumn1).Address(0, 0) & ";1;0)"
Allerdings erhebt sich die Frage, warum die Spalte flexibel sein soll. Eine relativ für die linke obere Zelle eines Geltungsbereichs formu­lierte RegelFml gilt ja (automatisch zellweise variiert) für den ganzen Geltungsbereich, der nur, ggf mit Lücken, entsprd groß gefasst wdn muss.
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
AW: Eben, und der ist offensichtlich falsch, da ...
11.08.2019 10:35:55
Mann
Hallo
vielen Dank an Luc - mit Angabe der Address(0,0) funktioniert es. Nun zum Warum :
die Tabelle hat für jeden Monat einen Sollwert,Istwert, Differenz. Differenz = Sollwert-Istwert
Nun soll der rgbBereich über die 12 Monate wandern. Jan.Sollwert|Jan.Istwert|Jan.Diff|...|Dez.Sollwert|Dez.Istwert|Dez.Diff| und für eine definierte Zeileanzahl die werte in der Jan.Diff bis Dez.Diff entsprechend einfärben.
Nochmals vielen Dank. Das Problem ist damit erstmal gelöst.
MfG
R.Mann
Wesentlich einfacher mit Z1S1-Addressierung
11.08.2019 12:09:07
Daniel
Hi
da du hier in der Formel die Spalten relativ zur ausgewählten Zelle angeben willst, empfielt sich hier die Z1S1-Addressierungsart zu verwenden, weil man in dieser Adressierungsart relative Zellebezüge auch relativ beschreiben kann und sie nicht in absolute Adressen umrechnen muss wie in A1.
die Bedingte Formatierung erkennt automatisch, ob Z1S1 oder A1-Adressen vorliegen, man muss nur eine dieser beiden Arten durchgängig in der Formel verwenden:
sFormel = "=Wenn(Z4S(-2)>Z4S(-1);1;0)"
und da die Bedingte Formatierung nur das WAHR (1) oder FALSCH (0) braucht, kannst du das WENN auch weglassen und nur die Bedingungsprüfung verwenden:
sFormel = "=Z4S(-2)>Z4S(-1)"
Gruß Daniel
ps: ein Hinweis noch zur Z1S1-Adressierungsart:
da hier automatisch die Adressierungsart erkannt wird und Z1S1-Adressen in der Kurzschreibweise (kein (0)) wie A1-Adressen aussehen können, muss man immer die Langschreibweise verwenden und darf bei Bezügen auf die gleiche Zeile oder Spalte das (0) nicht weglassen.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige