Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1320to1324
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

Kann eine Function eine Formatierung festlegen?

Kann eine Function eine Formatierung festlegen?
10.07.2013 11:19:39
Martin
Hallo,
ist es möglich über eine Function eine Zellformatierung vorzunehmen? Als einfaches Beispiel mal folgende Function, welche die Quadratwurzel zurückgibt. Theoretisch sollte die Hintergrundfarbe der Zelle bei einem Ergebnis kleiner 10 rot gefärbt werden:
Function Quadratwurzel(dblZahl As Double) As Double
Dim rngCell As Range
Set rngCell = Range(Application.Caller.Address)
Quadratwurzel = Sqr(dblZahl)
With rngCell.Interior
If Quadratwurzel 
Steht in einer Zelle nun die Formel "=Quadratwurzel(9)" wird zwar der Wert 3 korrekt zurückgegeben, aber leider ändert sich die Formatierung nicht.
Viele Grüße
Martin

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
dafür gibt es ...
10.07.2013 11:22:56
Klaus
... die bedingte Formatierung, Martin.
Grüße,
Klaus M.vdT.

...also geht es prinzipiell nicht per Function?
10.07.2013 11:34:12
Martin
Hallo Klaus,
vielen Dank für deine Antwort. Die bedingte Formatierung ist mir bekannt, aber ich hätte es gerne einfach direkt mit der Formel gelöst. Verstehe ich deine Antwort richtig, dass eine Function prinzipiell keine Zellformatierungen festlegen kann?
Viele Grüße
Martin

AW: ...also geht es prinzipiell nicht per Function?
10.07.2013 11:41:23
Hajo_Zi
Hallo Martin,
ja so ist es.

AW: ...also geht es prinzipiell nicht per Function?
10.07.2013 11:44:48
Klaus
Hallo Martin,
ich lasse den Beitrag mal offen!
Ich sage nicht, es geht nicht per Funktion. Es gibt bestimmt den einen oder anderen Kniff, den ich nicht kenne. Dass dein Beispiel nicht einfärbt obwohl der Code valide ist glaube ich dir (habe ich nicht geprüft) und lerne daraus: es geht zumindest nicht auf dem einfachem Weg per Funktion.
Mein Hinweis auf die bedingte Formatierung hatte aber einen anderen Hintergrund. Es gibt so einige Sachen, die aus einer UDF heraus zwar möglich sind, aber nicht empfehlenswert! Dazu gehört u.a.:
- ein Makro aufrufen
- eine MsgBox oder Userform zeigen
- die Zellselektion verändern
und, meiner Meinung nach, hat eine UDF auch nicht in den Zellformatierungen herumzuspielen, da sie dafür schlichtweg nicht da ist.
Da es bereits ein valides Mittel gibt, die Zellformatierung Ergebnissbedingt zu ändern (die bedingte Formatierung) sehe ICH keinen großen Sinn darin dies mit Gewalt per UDF zu lösen. Ausser dem akademischen Interesse natürlich..
Grüße,
Klaus M.vdT.

Anzeige
AW: ...also geht es prinzipiell nicht per Function?
10.07.2013 12:03:10
Martin
Hallo Klaus, hallo Hajo,
danke für eure Antworten. Ich lasse es mit meinen Formatierungsversuchen per UDF nun sein.
@Klaus: Ich musste erst einmal googeln was UDF überhaupt heißt (für andere Mitleser: "User Defined Function"). Im Grunde muss ich dir Recht geben, bei den Standard-Excelformeln würde mich eine vorgegebene Formatierung auch stören. So gesehen überrascht es mich sogar, dass eine MsgBox oder UserForm aufgerufen werden können. Ich muss aber zugeben, dass ich vor meinem Beitrags-Posting versucht hatte ein anderes Makro aufzurufen und die Formatierung "extern" durchzuführen. Wie du schon geschrieben hast, war der Makroaufruf zwar möglich, aber die Formatierungsanweisung wurde dennoch ignoriert.
Viele Grüße
Martin

Anzeige
AW: ...also geht es prinzipiell nicht per Function?
10.07.2013 11:54:55
Luschi
Hallo Martin,
die vba-Funktionen, die man in Zellen aufruft, dürfen nichts weiter als Werte berechnung und zurückgeben.
Zuweisungen jeglicher Art sind leider nicht erlaubt. In Excel 2010 wird selbst das Ergebnis wieder verworfen durch die Farbzuweisung und das Ergebnis ist #WERT!
Gruß von Luschi
aus klein-Paris

AW: ...Zusatz
10.07.2013 12:04:02
Luschi
Hallo Klaus,
selbst wenn man es so macht:

Function Quadratwurzel(dblZahl As Double) As Double
Dim rngCell As Range
Set rngCell = Range(Application.Caller.Address)
Quadratwurzel = Sqr(dblZahl)
farbeSetzen rngCell
End Function
Sub farbeSetzen(xRg As Range)
With xRg.Interior
If xRg.Value 
funktioniert das nicht, denn es kommt zu einem Zirkelbezug und das Ergebnis ist 0 statt #WERT!
Gruß von Luschi
aus klein-Paris

Anzeige
AW: ...also geht es prinzipiell nicht per Function?
10.07.2013 12:08:01
Martin
Hallo Luschi,
interessant zu wissen. Ich habe mir erst vor drei Tagen Excel 2010 gekauft, aber wegen der Aktivierungsprozedur habe ich es noch nicht installiert und arbeite noch mit der 2003er Version (...die mir übrigens sehr ans Herz gewachsen ist). Ich möchte Excel 2010 auf einem neuen (noch nicht fertig-konfigurierten) Rechner installieren.
So sind wir Excelianer, erst Excel kaufen, erst dann den dazugehörigen Computer ;-)
Viele Grüße
Martin

Prinzipiell ist es so wie beschrieben, ...
10.07.2013 15:32:52
Luc:-?
…Martin,
und das gilt für alle Fktt, die in Zellformeln zur Anwendung kommen, egal ob Standard oder UDF, es sei denn, die UDF benutzt API-Routinen, um dieses Verbot zu umgehen.
Ohne API-Bemühung kann man so etwas mit einer UDF nur per physischer Entkopplung* (RECHERCHE-Stichwort) von Berechnungs- und Formatierungsfktionalität erreichen, d.h., Letztere muss in eine Subroutine ausgelagert wdn, die von einer Ereignisprozedur aufgerufen wird, wenn zB die UDF einer GlobalVariable einen bestimmten Wert übergeben hat. Diese Verfahrensweise muss allerdings exakt durchdacht wdn und fktioniert idR nur im AutoKalk-Modus. Falls es dadurch zu Problemen kommt (vor allem in neueren xlVss), sollte man es besser lassen.
* Letztlich ist das mit der BedingtFormatierung ganz ähnlich, nur dass es sich auch noch um andere Objekte handelt, die dabei formatiert wdn!
Gruß Luc :-?
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige