Anzeige
Archiv - Navigation
1964to1968
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

Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler

Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
08.02.2024 12:26:16
Thomas Eckert
Moin,
ich habe das Problem, dass ich es einfach nicht schaffe eine Variable für die Formel einer bedingten Formatierung zu übergeben, damit diese dann auch richtig in die Regel für die bedingte Formatierung übernommen wird.
Hier die betreffende Code-Zeile:
Set condition = rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$" & columnDiff & "1>0")

columnDiff ist die Variable für die Spalte mit der Überschrift "Diff"

Wenn ich anstelle
Formula1:="=$C1>0"
eintrage und dort die Spalte "Diff" steht, funktioniert das Ganze super.

Aber ich möchte eigentlich die Spalte "Diff" als Bedingung nutzen, egal, wo die Spalte Diff steht, Da die tabelle mal eine oder mehrere Spalten breiter sein kann. Aber die Bezugsspalte heißt immer "Diff"

Würde mich freuen, wenn mir die "Profis" helfen könnten. Beispieldatei hab ich auch hochgeladen.
https://www.herber.de/bbs/user/166902.xlsm

Beste Grüße
Thomas (eggi)

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
08.02.2024 22:50:42
Eggi
Hallo onur,

Vielen Dank für den Hinweis und die Beispiel-Datei. Dein Ansatz ist für mich aber leider nicht anwendbar.
Ich versuche es noch weiter zu erläutern.
Dies ist nur eine Beispiel-Tabelle für ein größeres Projekt. Es ist notwendig, dass die "Bedingte Formatierung" über eine VBA-Routine eingebracht wird, da dies aus einem Workbook in ein anderes Workbook zugegriffen, auf einer bestimmten Seite mit einer benannten Tabelle geschehen soll.
Da sich der Spalten-Umfang dieser Tabelle aber verändern kann und die ausschlaggebende Spalte "Diff" nicht grundsätzlich in der 3. Spalte (also C) liegen kann, muss ich mit einer Variablen arbeiten, die bei der Übertragung sowas wie ... Formula1:="=$C1>0" ... produziert. Analog zu der Spalte in der eben die "Diff" sich befindet. Kann also auch heißen Formula1:="=$E1>0"
Ich hab noch einmal eine Beispieldatei mit der Beispiel-Tabelle und einer VBA-Routine (Makro) im Modul "mod_BedFormat" hochgeladen. Darin sind noch weitere Details und Hinweise vermerkt. Die Sub darin formatiert die Tabelle genau so wie ich es mir vorstelle.
ABER sie ist eben auf die Spalte "C" fixiert. Und das ist genau die Einschränkung, die ich gerne überwinden möchte. Und das geht aus meiner NuBi-Sicht wohl eher nur mit einer Variablen in der zu übergebenden Formel. Aber die Variante Formula1:="=$" & columnDiff & "1>0" funzt eben nicht. Ich denke, ich hab auch eine ungefähre Vorstellung. Es hat wahrscheinlich mit der Verteilung und der Anzahl der Anführungszeichen und &-Zeichen zu tun. Aber ich hab es nicht geschafft, das Prinzip zu erkennen. :-(

Vielleicht hast Du, oder ein anderer Profi noch eine Lösung für dieses vielleicht doch nicht so "unkomplizierte" Code-Problem ;-)

Die besagte Beispieldatei: https://www.herber.de/bbs/user/166924.xlsm

Besten Dank!
Eggi
Anzeige
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
08.02.2024 23:25:44
onur
Verstehe das ganze nicht: Du schreibst, die Spalte mit Titel "Diff" bekommt eine bedingte Formatierung, aber bei dir hat Spalte C KEINEN Titel "Diff", aber die 16.
Du schreibst: bei C>0 Rot - bei C=0 Grün - bei C Gelb, aber in deiner Datei sind es immer die Zeilen DARÜBER, die berücksigt werden (C5=0 - Zeile 6 wird grün gefärbt.
?????
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
09.02.2024 13:38:49
daniel
Hi
prinzipiell funktioniert dein Code bei mir, vorallem der Teil, den du hier nachfragst, ist korrekt.

der Fehler ist schon viel früher, dort wo du versuchst, die Zeilennummer zu ermitteln und dabei einfach einen Text als Spaltenangabe verwenden willst, also hier:
' Letzte Zeile in der Spalte "Diff" finden

lastRow = ws.Cells(ws.Rows.Count, "Diff").End(xlUp).Row

das funktioniert so nicht.
wenn du dich auf benannte Tabelle beziehen willst, dann so:
' Letzte Zeile in der Spalte "Diff" finden

lastRow = ws.Cells(ws.Rows.Count, Range("TestTabelle[Diff]").Column).End(xlUp).Row


oder du ziehst das columnDiff vor und verwendest das, denn hier hast du den korrekten Spaltenbuchstaben:

 ' Spaltenbuchstaben für die Spalte "Diff" ermitteln

columnDiff = Split(ws.Cells(1, Application.Match("Diff", ws.Rows(1), 0)).Address, "$")(1)
' Letzte Zeile in der Spalte "Diff" finden
lastRow = ws.Cells(ws.Rows.Count, columnDiff).End(xlUp).Row


Gruß Daniel
Anzeige
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
09.02.2024 14:14:14
Thomas Eckert
Hallo Daniel, make my day!

Das war genau die Lösung! Ich bin happy.
Der Ausdruck "Range("TestTabelle[Diff]").Column" war das fehlende Puzzle-Teil.
Vielen Dank! Wieder was gelernt!

Beste Grüße
Eggi
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
09.02.2024 09:52:25
Thomas Eckert
Hallo onur,

Du hast natürlich recht. In meinem Code war ein Fehler, da ich nicht an allen Stellen berücksichtigt habe, dass die Tabelle ja eine Überschrift hat, und deshalb die relevanten Daten erst mit Zeile 2 beginnen.
In der angehangenen Beispieldatei hab ich das geändert. jetzt müsste die Zuordnung stimmen. Ich hab jetzt auch die Spalte C mit "Diff" bezeichnet. was aber eigentlich bis jetzt noch nicht wirklich relevat war, da die Bedingte Formatierung ja in der Formel mit z.B. Formula1:="=$C1>0" selektiert wird.

Ok, jetzt noch einmal zum eigentlichen Problem.

Der User, der später diese Funktion auf eine seiner Tabelle anwenden soll, hat zwar einen gleichen Typ Tabelle, aber es ist nicht garantiert, dass die Spalte "Diff", in denen die relevanten Daten zur Farbentscheidung stehen, auf der Position C-Spalte(!) zu finden ist. Es muss also vor der Übertragung der "Bedingten Formatierungsformeln" gesucht werden, in welcher Spaltenposition sich "Diff" nun wirklich befindet.
Kein Problem - aber dann besteht die Formatierungsformel aus einer Variablen, oder ein teil davon zumindest aus einer Variablen. Z.B. eben etwa so: Formula1:="=$" & columnDiff & "1>0
Und denau da liegt das Problem! Diese Art von Formeln kann rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$" & columnDiff & "1>0) nicht über nehmen! Es entsteht dabei ein Fehler.
Ich hoffe, dass ich es jetzt noch einmal besser eingrenzen konnte.

Besten Dank
Eggi

Besagte geänderte Beispieldatei: https://www.herber.de/bbs/user/166928.xlsm

PS: Ich bin ja neu hier. Deshalb noch eine Frage. Sollte ich beim Antworten auf einen Beitrag das Optionskästchen "Frage noch offen" anklicken, solange das Anliegen noch nicht abschließend geklärt ist? Ich hab es jetzt mal getan. Hoffe, es war richtig.
Anzeige
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
09.02.2024 10:18:15
onur
Du hast dich jetzt auf deine Idee mit der Variablen festgebissen, so dass du nur noch Scheuklappen hast und nix anderes siehst.
Nochmal: MEINE bedForm funktioniert ohne "Variable" und Makro.
Wenn du daraus aber ein Makro machen willst:
Einfach Makrorecorder einschalten, NUR Farbe der bedForm anpassen (und ggf Bereich erweitern), Recorder aus und du hast dein Makro.
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
09.02.2024 12:09:25
Thomas Eckert
Hallo onur,

vielen Dank, dass Du mir helfen wolltest.

Ich möchte Dir nur noch einmal abschließend nahe bringen, warum ich mich nicht auf eine Lösung festgebissen habe und warum der Makro-Rekorder eben nicht der Problemlöser ist.

In der späteren Verwendung hat der "User", dem ich ein "Umformatierungstool" zur Verfügung stelle, keine Ahnung von "Bedingter Formatierung". Er hat einen Excel-Export aus einem SAP-System mit Rohdaten vor sich.
Mit meinem "Tool" (im Hintergrund eine EXCEL-Makro-Datei) greift er auf seinen EXCEL-Export zu und die Makros (die meisten integrierten Funktionen funktionieren schon) in meinem "Tool" formatieren diese Tabelle in eine lesbare, von Müll befreite, und mit einer Bedingten Formatierung - abhängig von den von ihm gewählten Spaltenanzahl - Tabelle um.
Dann wird die Datei wieder geschlossen und am Ende hat er seine Tabelle fertig und mein Tool ist immer noch das Tool. Wartet auf die nächste Tabelle, die ihm vorgesetzt wird. Der User hat nur SEINE Datei gewählt und auf meinem Tool einen Button gedrückt.

Ich hoffe, ich konnte das jetzt deutlich machen. ich habe keine Chance, irgend eine "feste" Formatierung in diesen EXCEL-Export händisch einzubringen, da er mir nicht vorliegen wird und ich nicht der USER sein werde.
Vielen Dank noch einmal. Ich habe jetzt noch eine Idee zu einer Vorgehensweise, die am Ende das bewirkt, was ich brauche - wenn es auch durch die kalte Küche sein wird. Aber ich denke, ich werde es händeln können.

Viel Spaß damit, Anderen Nubis weiterzuhelfen. Eine tolle Aufgabe.
Gruß, Eggi
Anzeige
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
09.02.2024 12:16:07
onur
Sorry, aber als würde ich mit der Wand reden ! Ist es denn so schwer, einen Text RICHTIG zu lesen und zu verstehen ?
Anscheinend hast du null Ahnung, was ich meine, aber lehnst es schon ab !
Wenn du den Makrorecorder so bedienst, wie ich bereits beschrieb, dann hast du doch dein gewünschtes MAKRO, das dir die bedingte Formatierung erstellt.
Das kannst du dann in dein Tool einbauen. Erwartest du etwa, dass ICH dir das in dein Tool (das ich nicht mal kenne) einbaue ?
AW: Bedingte Formatierung - Formula1 mit Variable Laufzeitfehler
09.02.2024 13:19:56
Eggi
Schade onur,
Du kannst mir leider nicht helfen, da ich vermute, dass Du den Kern meines Problems gar nicht erkannt hast. Vielleicht nicht einmal meine mitgelieferte Sub in den Beispieldateien gesehen. Es scheint, als wäre ich nicht in der Lage es transparent genug zu beschreiben. Deine Vorschläge habe ich alle durchgearbeitet und sie helfen mir halt nun mal nicht. Das ist aber auch nicht mehr ausschlaggebend, da ich keine Unterhaltung pflege bei der die Kompetenz und Intellegenz des Gegenübers angezweifelt wird. Ich erwarte überhaupt nichts. Alles was Du einbringst machst Du freiwillig. Das tue ich auch. Und deshalb breche ich diese Konversation jetzt völlig freiwillig ab.
Dir noch einen schönen Tag.
Gruß
Eggi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige