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 ...