HERBERS Excel-Forum - das Archiv

Thema: Zellen einfärben / Code läuft aber nur im Direktfenster

Zellen einfärben / Code läuft aber nur im Direktfenster
VBA-Legastheniker
Hallo,
ich bin leider noch ein ziemlicher Anfänger, was VBA und das Objektmodell von Excel an geht. Leider erscheint (zumindest mir) auch nicht alles sehr logisch.
Ich habe folgendes Problem: Es soll in einer Funktion über ein als Parameter übergebenen Zellbereich itieritert werden und in Abhängigkeit der in den Zellen stehenden Werten diese Zelle (Hintergrund) eingefärbt werden: Ja, kann man alles ganz einfach direkt in Excel machen - aber es geht hier um's Prinzip, denn die eigentliche Aufgabe ist viel komplexer. Hier der ("Test-")Code mit verschiedenen Varianten (sind jeweils auszukommentieren)



Public Function AFcn(rBereich As Range) As Integer
' Aufruf aus einem Tabellenblatt z.B. =AFcn(C2:F2)
' In C2:F2 stehen Daten (oder auch nicht)

Dim i As Long
Dim r As Range

On Error GoTo Err__

AFcn = 0
For i = 1 To rBereich.Count
If (Not IsEmpty(rBereich.Cells(i).Value)) Then
If (rBereich.Cells(i).Value = 0) Then
Debug.Print "Bedingung erfüllt"
Debug.Print "Aktuelle Hintergrundfarbe: " & rBereich.Cells(i).Interior.Color ' Farbe auslesen geht immer!
rBereich.Cells(i).Interior.Color = RGB(255, 0, 0) ' Variante 1: Funktioniert nicht in der Funktion, aber im Direktbereich!
Debug.Print "Aktuelle Zelladresse: " & rBereich.Cells(i).Address()
Range(rBereich.Cells(i).Address()).Interior.Color = RGB(255, 0, 0) ' Variante 2a: Funktioniert nicht in der Funktion, aber im Direktbereich!
Set r = Range(rBereich.Cells(i).Address()) ' Variante 2b: Funktioniert nicht in der Funktion, aber im Direktbereich!
r.Interior.Color = RGB(255, 0, 0)
AFcn = AFcn + 1
End If
End If
Next i
Exit Function
Err__:
Debug.Print "FEHLER: #" & Err.Number & " (" & Err.Description; ")"
End Function


Leider funktioniert weder Variante 1 noch die (voller Verzweiflung zusammengebastelten Varianten 2a und 2b) NICHT beim Funktionsaufruf. Es tritt stets der Fehler:
#1004 (Anwendungs- oder objektdefinierter Fehler) auf. Soweit könnte man meinen, dass es eben so nicht geht, aber WARUM funktioniert es im Direktfenster (keine Fehlermeldung dafür aber eine Einfärbung). Was mache ich falsch? Wie kann man möglichst einfach die Hintergrundfarbe über Cells(i) ändern????
Ich wäre über jede Hilfe und Erläuterung (zwecks Verständnis) sehr dankbar!
Ein verzweifelter VBA-Einsteiger ...
AW: Zellen einfärben / Code läuft aber nur im Direktfenster
ralf_b
es könnte daran liegen das eine udf Beschränkungen unterliegt
z.b. Die Funktionen dürfen nur Werte berechnen und zurückgeben; sie dürfen keine Aktionen beinhalten wie z. B. Änderungen von Zellinhalten oder Änderungen von Zellformatierungen oder anderer Eigenschaften der Excel-Objekte
Quelle: https://hermann-baum.de/excel/hbSort/de/udf.php
AW: Zellen einfärben / Code läuft aber nur im Direktfenster
Onur
Eine Funktion, die du in Excel benutzen willst, darf keine Zellen verändern, nur Werte als Ergebnis ausgeben.
Auch wenn sie unter VBA-Bedingungen funktioniert, darfst du sie, wie du siehst, nicht in Excel benutzen.
AW: Zellen einfärben / Code läuft aber nur im Direktfenster
VBA-Legastheniker
DANKE für den Hinweis - Ja, es scheint genau daran zu liegen, dass es eine Beschränkung von UDF ist.
Nur, wie kann man dann im Ergebnis einer Berechnung (einer "UDF") in Excel mehrere Zelleinträge ändern? Im vorliegenden Fall nutze ich die Excel-Formel/Funktion (UDF) nur zum Debugging. Aber tatsächlich hatte ich auch vor einige der Funktionen (wenn alles läuft) auch als Excel-Formeln "bereitzustellen" ... was nur nicht gehen wird - echt blöd?!

Praktisch würde dies bedeuten, dass man mit einer Excel-Funktion zum einen
* nur die Zellen, die man mit einem Rückkehrwert (d.h. die Zellen in welcher die Funktion steht), mit einem Wert belegen kann, und zum anderen
*nicht mal ein Format der Zelle selbst (z.B. die Farbe einer Zelle, in welcher die UDF steht in Abhängigkeit eines Parameters) ändern kann (z.b. steht in einer Zelle: =Zellfarbe('rot') und die Funktion Zellfarbe färbt die Zelle in Rot - nur ein Beispiel; ist nicht sehr sinnvoll)?

Das ist eine ziemliche Einschränkung; dafür muss es doch eine Workaround geben??????
AW: Zellen einfärben / Code läuft aber nur im Direktfenster
Onur
KEINE Formel kann irgendwas an der Zellfarbe ändern, somit auch keine UDF.
Für das, was du vorhat, gibt es die "bedingten Formatierungen".
AW: Zellen einfärben / Code läuft aber nur im Direktfenster
VBA-Legastheniker
DANKE für den Hinweis - Ja, es scheint genau daran zu liegen, dass es eine Beschränkung von UDF ist.