Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Kann eine Function eine Formatierung festlegen?

Betrifft: Kann eine Function eine Formatierung festlegen? von: Martin
Geschrieben am: 10.07.2013 11:19:39

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 < 10 Then
            .ColorIndex = 3
        Else
            .ColorIndex = 0
        End If
    End With
    
End Function
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

  

Betrifft: dafür gibt es ... von: Klaus M.vdT.
Geschrieben am: 10.07.2013 11:22:56

... die bedingte Formatierung, Martin.

Grüße,
Klaus M.vdT.


  

Betrifft: ...also geht es prinzipiell nicht per Function? von: Martin
Geschrieben am: 10.07.2013 11:34:12

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


  

Betrifft: AW: ...also geht es prinzipiell nicht per Function? von: Hajo_Zi
Geschrieben am: 10.07.2013 11:41:23

Hallo Martin,

ja so ist es.

GrußformelHomepage


  

Betrifft: AW: ...also geht es prinzipiell nicht per Function? von: Klaus M.vdT.
Geschrieben am: 10.07.2013 11:44:48

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.


  

Betrifft: AW: ...also geht es prinzipiell nicht per Function? von: Martin
Geschrieben am: 10.07.2013 12:03:10

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


  

Betrifft: AW: ...also geht es prinzipiell nicht per Function? von: Luschi
Geschrieben am: 10.07.2013 11:54:55

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


  

Betrifft: AW: ...Zusatz von: Luschi
Geschrieben am: 10.07.2013 12:04:02

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 < 10 Then
            .ColorIndex = 3
        Else
            .ColorIndex = 0
        End If
    End With
End Sub
funktioniert das nicht, denn es kommt zu einem Zirkelbezug und das Ergebnis ist 0 statt #WERT!

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: ...also geht es prinzipiell nicht per Function? von: Martin
Geschrieben am: 10.07.2013 12:08:01

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


  

Betrifft: Prinzipiell ist es so wie beschrieben, ... von: Luc:-?
Geschrieben am: 10.07.2013 15:32:52

…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 :-?


 

Beiträge aus den Excel-Beispielen zum Thema "Kann eine Function eine Formatierung festlegen?"