2017-03-14 2 views
2

Ich fand eine UDF, die die Werte einer Zelle basierend auf ihrer Farbe berechnet. Es hat perfekt funktioniert, als ich es das erste Mal benutzt habe. Wenn ich jetzt jedoch die Farbe einer Zelle ändere (die Farbe bestimmt, ob die Zelle geplant oder ausgeführt wurde), wird sie in der vorhandenen Arbeitsmappe nicht automatisch aktualisiert. Siehe Code unten:Wie bekomme ich eine UDF basierend auf Zellenfarbe zu automatisch aktualisieren in Excel

Function SumByColor(CellColor As Range, rRange As Range) 
Application.Volatile True 
Dim cSum As Long 
Dim ColIndex As Integer 
Dim cl As Variant 
ColIndex = CellColor.Interior.ColorIndex 
For Each cl In rRange 
    If cl.Interior.ColorIndex = ColIndex Then 
    cSum = WorksheetFunction.Sum(cl, cSum) 
    End If 
Next cl 
SumByColor = cSum 
End Function 

ich Application.Volitale versucht, aber kein Glück. F9 aktualisiert die Zellen, die die Funktion enthalten. Allerdings wäre es besser, automatisch zu aktualisieren, falls ich beschäftigt bin oder von meinem WS weggehe. Irgendwelche Ideen?

+0

War 'Application.Volitale' einen Tippfehler in der Frage' Application.Volatile', oder war die Tippfehler in Ihrem ursprünglichen Code und das ist ein Teil des Grundes, warum es nicht funktioniert hat. (Soweit ich weiß, wird das Ändern der Farbe einer Zelle Excel nicht zwingen, eine Neukalibrierung durchzuführen, also bezweifle ich, ob "Volatile" auf jeden Fall helfen wird.) – YowE3K

+0

Das Ändern der Zellenfarben löst keine Berechnung oder ein anderes Ereignis aus So wie ich es sehe, können Sie versuchen, 'Worksheet_SelectionChange' zu ​​verwenden, oder ein Makro erstellen, das sich selbst wiederholt (etwa jede Sekunde) und die Berechnung auslöst. –

+0

Was ist Aktualisierungsbereich CellColor? Sie möchten SumByClor nur aktualisieren, wenn der Bereich die Farbe ändert. Du sagst "oder geh weg von meinem WS". Was rennst du, dass die Zelle Farbe wechselt, während du von deinem Schreibtisch weg bist? Was auch immer es ist, können Sie das Arbeitsblatt neu berechnen lassen? – Winterknell

Antwort

0

Sie können ein Arbeitsblatt Ereignis proc erstellen, die ausgeführt wird, wenn eine Änderung auf dem Blatt erkannt wird:

Private Sub Worksheet_Change(ByVal Target as Range) 
    'Call function with appropriate variables 
End Sub 
Verwandte Themen