Ich verzweifle an dem Versuch, ein Zelle, die eine VBA-Funktion aufruft, innerhalb dieser Funktion zu verändern.
Einzig den Inhalt der Zelle kann ich über den Rückgabewert ändern. Ich muß aber eine Lösung finden, über diese Funktion das Format der Zelle (Schriftart, Schriftfarbe, Rahmenlinien, etc.) verändern zu können.
In einer Prozedur ist dies problemlos möglich, aber Prozeduren lassen sich von Excel-Tabellenblättern aus nicht aufrufen!
vereinfachtes Beispiel:
Zelle A1 = completeCopy()
function completeCopy()
Range(Application.Caller.Address) .Borders(xlEdgeBottom).LineStyle=xlContinuous
end function
Debug-Ausgaben vor und hinter dem Zugriff auf die Rahmenlinie liefern gleiche Werte. Es hat also den Anschein, daß die Zelle (wie auch alle anderen) während der Laufzeit der Funktion scheinbar schreibgeschützt ist!?
Ich habe eine sub-Prozedur geschrieben, die die Formatierung einer bestimmten Zelle ändert - kein Problem.
Nun habe ich lediglich das Wort sub durch das Wort Function ersetzt (ebenso bei end) - alles andere blieb identisch. Das Makro wurde ausgeführt, aber die Formatierung wurde nicht geändert.
Fazit: Wie im Titel gesagt.
Aber es gibt einen möglichen Ausweg (ab Excel 97), über ein Ereignis-Makro des Tabellenblattes.
Klicke rechts auf den Tabellenblattnamen und wähle „Code anzeigen“. Darauf öffnet sich der Visual Basic Editor und Du kannst ein Ereignismakro für das Tabellenblatt eingeben, das Du auf „Change“ änderst.
In dieser Prozedur wird eine Range-Variable Target übergeben, die die Zelle enthält, die den Change verursacht hat. Hier kannst Du nun alle Formatierungen steuern.
Diese Lösung hat natürlich eventuell einige Nachteile, z.B. habe ich noch nicht getestet, ob die Prozedur ausgelöst wird, wenn auf Grund einer Neuberechnung sich das Ergebnis einer Funktion in einer Zelle ändert (ich vermute nein).
Aber ich denke, diese Möglichkeit ist am dichtesten dran an dem, was Du willst.
Ich habe eine sub-Prozedur geschrieben,
die die Formatierung einer bestimmten
Zelle ändert - kein Problem.
Nun habe ich lediglich das Wort sub durch
das Wort Function ersetzt (ebenso bei
end) - alles andere blieb identisch. Das
Makro wurde ausgeführt, aber die
Formatierung wurde nicht geändert.
Fazit: Wie im Titel gesagt.
Hallo Thomas!
Also wie ich es befürchtet hatte.
Die Event-Steuerung ist eine interessante Idee. In diesem Fall dürfte sie aber schwer umzusetzen sein, da das Format der Zelle nicht von ihrem direkten Inhalt abhängen soll, sondern von der Zelle übernommen werden muß, auf die sich die Formel in der Zelle bezieht.
Dafür müßte man die Formel auswerten und den Bezug wieder in ein Range-Objekt umwandeln. Ich werde das bei Gelegenheit noch einmal testen.