Clever-Excel-Forum

Normale Version: Farbsumme automatische Berechnung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Excel Freunde,

Ich habe über VBA folgendes Modul erstellt:

Function Farbsumme(Bereich As Range, Farbe As Integer)
Dim Zelle As Range
Application.Volatile
For Each Zelle In Bereich
  If Zelle.Interior.ColorIndex = Farbe Then
    Farbsumme = Farbsumme + Zelle
  End If
Next
End Function

Jetzt werden alle Zahlen addiert die als Hintergrund die Farbe haben die in der Formel von mir angegeben wird. Ich wähle zB die 6, weil ich will dass alle Zellen die Gelb hinterlegt sind addiert werden sollen. 
Das klappt auch alles, jedoch mit einem Umweg. Ich muss erst auf die Formel gehen und dann nochmal enter drücken und dann aktualisiert sich die Zahl. Also wenn ich in den markierten Zellen eine Zelle gelb markiere, folgt die Addition nicht automatisch sondern nur wenn ich dann nochmal auf die Zelle gehe und enter drücke. 
Habt ihr das Verbesserungsvorschläge? Wie kann ich das umschreiben, so das dass direkt automatisch funktioniert?

Danke im voraus
Hallo,

in Excel die Änderung der Farbe als Event zum Starten eines Makros bzw Neuberechnung einer UDF zu erkennen, ist nicht so ganz trivial.

Da ich mich heute morgen (weitgehend) vergeblich darum bemüht habe, teile ich gerne einen link:

http://www.office-loesung.de/p/viewtopic.php?f=166&t=814220

mfg
Hallo Portgas,

eine Farbänderung löst leider kein Ereignis für die VBA-Funktion aus.
Aber die Taste "F9" drücken sollte reichen!

Grüße
Sigi
Bitte, verwende Code Tags und lade mal eine Beispieldatei hoch.
Das mit F9 reicht mir schon. 

Danke euch allen

Viele Grüße

Portgas
Hallo,

teste mal mit diesem Code:

Code:
######### Klassenmodul: OnColor #########

Private WithEvents CB As Office.CommandBars
Private Old_Color As Long



Public Sub StartWatching()
    Set CB = Application.CommandBars
End Sub

Public Sub Old(rng)
    Old_Color = rng.Interior.Color
  
End Sub

Private Sub CB_OnUpdate()

    If Old_Color <> ActiveCell.Interior.Color Then Modul1.T_1
    
End Sub

############## Workbook #########
Private Color_Monitor As Object


Private Sub Workbook_Open()
    Set Color_Monitor = New OnColor
    
    Color_Monitor.StartWatching
    
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  
    Color_Monitor.Old ActiveCell
    
End Sub

########### Modul1.T_1 #### wird ausgeführt

Sub T_1()
Debug.Print "T_1", ActiveCell.Address
application.calculate
End Sub

Der Code ist noch etwas expirimentell, also feedback ist erwünscht!

Farbänderungen sollten erfasst werden, aber nicht das Zurücksetzen.

mfg