Registriert seit: 30.11.2022
Version(en): 365
25.02.2023, 18:50
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2023, 19:47 von WillWissen.
Bearbeitungsgrund: Codetags gesetzt
)
Hallo ich möchte in VBA eine Formel Schreiben, der ich eine Range, RGB-Werte vom Vorder- und Hintergrund und einen Namen aus dem Namensmanager übergebe. Ich möchte eine Bedingte Formatierung machen, ohne dies über die Menü zu bearbeiten. Es soll überprüft werden ob der Name aus dem Namensmanager in der Range steht und mit den übergebenen RGB-Werten formatiert werden. Das ist mein Code: Function FORMAT(rng As Range, rh As Integer, gh As Integer, bh As Integer, rv As Integer, gv As Integer, bv As Integer, bedingungsname As Name) Code: Dim Zelle As Range
' Überprüfen, ob der übergebene Bereich eine einzelne Zelle ist If rng.Cells.Count = 1 Then ' Überprüfen, ob der Wert in der Zelle dem Bedingungsnamen entspricht If rng.Value = bedingungsname.name Then ' Die Vordergrund- und Hintergrundfarbe der Zelle ändern rng.Interior.Color = RGB(rv, gv, bv) rng.Font.Color = RGB(rh, gh, bh) End If Else ' Schleife durch alle Zellen im übergebenen Bereich For Each Zelle In rng.Cells ' Überprüfen, ob der Wert in der Zelle dem Bedingungsnamen entspricht If Zelle.Value = bedingungsname.name Then ' Die Vordergrund- und Hintergrundfarbe der Zelle ändern Zelle.Interior.Color = RGB(rv, gv, bv) Zelle.Font.Color = RGB(rh, gh, bh) End If Next Zelle End If End Function
Jedoch kommt immer #WERT als Fehler Mein Aufruf: =FORMAT(C:C;223;33;39;255;255;255;FCB) (steht in Zelle D3) In Zelle C3 steht =FCB Im Namensmanager ist FCB definiert als "FC Bayern München" Wo ist mein Fehler
Registriert seit: 26.09.2022
Version(en): 2019
25.02.2023, 22:07
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2023, 22:07 von derHoepp.)
Hi, Zitat:Wo ist mein Fehler 1. In einer UDF kannst du nur lesend auf Eigenschaften von Rangeobjekte zugreifen (Workarounds sind möglich). 2. Du gibst in deiner Function keinen Wert zurück, daher erhältst du auch den #wert Fehler. 3. Die .Name Eigenschaft eines Namens gibt nicht den Inhalt zurück. Viele Grüße derHöpp
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, hier mal noch ein Ansatz, wie es gehen könnte. Schreibe Deinen Code in ein Worksheet_Change - Makro und lässt in der Zelle zumindest das "=" vor dem FORMAT weg oder gleich beides . 2 Varianten: 1) Deine Daten sind statisch. Du änderst die Zelle mit FORMAT(..). Dann prüfst Du lediglich, ob die geänderte Zelle die mit dem FORMAT ist und wenn ja, führst Du den Teil mit der Formatierung aus. Ich würde übrigens zuerst noch prüfen, ob die FORMAT-Angaben vollständig und syntaktisch passend sind. 2) Deine Daten sind nicht statisch Du änderst Daten. Dann prüfst Du, ob die Änderung im betreffenden Datenbereich erfolgt ist und wenn ja, führst Du den Teil mit der Formatierung aus. Falls beides zutreffen kann, musst Du das kombinieren. Falls Du mehrere Zellen mit FORMAT für verschiedene Bedingungen hast, musst Du die ggf. in einer Schleife verarbeiten.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 30.11.2022
Version(en): 365
26.02.2023, 15:35
(Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2023, 15:36 von MJ2003.)
Wie müsste ich den die Function anpassen
(26.02.2023, 09:21)schauan schrieb: Hallöchen,
hier mal noch ein Ansatz, wie es gehen könnte. Schreibe Deinen Code in ein Worksheet_Change - Makro und lässt in der Zelle zumindest das "=" vor dem FORMAT weg oder gleich beides .
2 Varianten:
1) Deine Daten sind statisch. Du änderst die Zelle mit FORMAT(..). Dann prüfst Du lediglich, ob die geänderte Zelle die mit dem FORMAT ist und wenn ja, führst Du den Teil mit der Formatierung aus. Ich würde übrigens zuerst noch prüfen, ob die FORMAT-Angaben vollständig und syntaktisch passend sind.
2) Deine Daten sind nicht statisch Du änderst Daten. Dann prüfst Du, ob die Änderung im betreffenden Datenbereich erfolgt ist und wenn ja, führst Du den Teil mit der Formatierung aus.
Falls beides zutreffen kann, musst Du das kombinieren. Falls Du mehrere Zellen mit FORMAT für verschiedene Bedingungen hast, musst Du die ggf. in einer Schleife verarbeiten. Wie müsste ich den die Function anpassen?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, in Deinem geposteten Code fehlt ja der Funktionsaufruf, und welche Variante zutrifft schreibst Du auch nicht. Hast Du den Code nicht selbst geschrieben? Im Prinzip so für eine Änderung in D3. In D3 stehen nur die Parameter, also C:C;223;... Code: Private Sub Worksheet_Change(...Target...) 'Deklaration der Variablen Dim rng as Range, ...
If Target.Address = "$D$3" Then
'Variablen befuellen durch Trennung der Parameter aus D3 set rng = range(split(target,";")(0)) ...
'Nun kommt Dein bisheriger Code
Falls Du Variante 1 und 2 kombinieren willst, dann ggf. die Prüfung so: If Target.Address = "$D$3" Or Intersect(Target, range(split(Range("D3");";")(0)) Then Falls range(split(target,";")(0)) zu einem Fehler führt probiere bitte die Zuweisung von split(target,";")(0) an eine Variable und verwende diese dann z.B. in der set - Zeile. Die (0) gibt hier C:C zurück. Falls das der Bereich zum Einfärben bzw. Umfärben bei Änderung ist, sollte es auch bei der If-Prüfung passen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 30.11.2022
Version(en): 365
26.02.2023, 23:36
(Dieser Beitrag wurde zuletzt bearbeitet: 27.02.2023, 07:05 von schauan.
Bearbeitungsgrund: Vollzitat entfernt
)
=FORMAT(C:C;223;33;39;255;255;255;FCB) diesen Funktionsaufruf mache ich in Zelle D3, mit dem Ziel, dass alle Zellen der Spalte C (angebene als 1. Parameter), die die Formel =FCB enthalten (letzter Parameter) mit den Farbwerten (Parameter 2-4 Vordergrund, Parameter 5-7 Hintergrund) formatiert werden. Jedoch funktioniert das nicht.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo, 1) bitte keine Vollzitate. Ich habe das letzte entfernt. 2) Zitat:=FORMAT(C:C;223;33;39;255;255;255;FCB) diesen Funktionsaufruf mache ich in Zelle D3 Wenn Du das immer noch machst, dann hast Du vermutlich die Antworten nicht verstanden. Mein Ansatz geht in eine andere Richtung und derHoepp hatte 1. ... geschrieben.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 30.11.2022
Version(en): 365
(27.02.2023, 07:14)schaua schrieb: Wenn Du das immer noch machst, dann hast Du vermutlich die Antworten nicht verstanden. Mein Ansatz geht in eine andere Richtung und derHoepp hatte 1. ... geschrieben. Ich hab die Antwortenn auch nicht verstanden
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
Also, das was derHoep geschrieben hat, bedeutet in etwa, dass Deine Funktion nicht funktioniert weil Excel das nicht kann. Ich wüsste jetzt nicht, wie man das noch beschreiben soll. Da muss bzw. kann man demzufolge auch nix anpassen, damit es funktioniert.
Man kann z.B. einen anderen Weg beschreiten, ohne diese Funktion. Aber wenn Du auf einer Funktion beharrst ...
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 26.09.2022
Version(en): 2019
27.02.2023, 18:11
(Dieser Beitrag wurde zuletzt bearbeitet: 27.02.2023, 18:11 von derHoepp.)
Moin,
als UDF bezeichnet man eine VBA-Funktion, die wie eine "normale" Formel in einer Excel-Zelle verwendet wird. UDF sind dabei darauf beschränkt, Werte zurückzugeben, die dann in der Zelle angezeigt werden können (wie das bei Formeln eben so ist). Excel-VBA zieht automatisch eine Art Sicherheitszaun um die UDF um sicherzustellen, dass (potentiell schädliche) aktive Inhalte nicht durch einfache Zellformeln ausgelöst werden. Das führt dazu, dass sich weder Farben, noch Inhalte von Zellen ändern lassen.
Wenn du das dennoch tun willst, musst du die UDF eben in ein "normales" VBA-Programm umschreiben, das du von VBA aus aufrufst.
Der von dir gezeigte Code sieht schon ziemlich fortgeschritten aus, deswegen verwundert es ein wenig, dass du die bisherigen Anregungen nicht aufnehmen konntest. Woher hast du den Code denn? Und was willst du eigentlich erreichen? Wieviele Formatierungen willst du erzeugen? In welchem Rhythmus ändern sich die Daten? Gibt es eine Beispieldatei?
Viele Grüße derHöpp
|