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

Function in Sub einbinden...?!

Function in Sub einbinden...?!
26.01.2021 08:35:31
M.Bacher
Guten Morgen Zusammen!
Ich bastel mir gerade etwas zusammen, was aus einer PrivateSub und einer Function bestehen soll.
Folgendes Scenario:
Ich habe ein Sub, das mir bei Klick in eine Zelle, diese schwarz einfärbt. Nochmaliges klicken färbt die Zelle wieder weiß. Das funktioniert gut, alles bestens.
Hier der Sub, eingetragen als Code in der Tabelle1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set changeRange = Range("E6:BE57")
intColor = 0 'Schwarz
If Not Application.Intersect(changeRange, Target) Is Nothing Then
With Target.Interior
.Color = IIf(.Color = intColor, xlNone, intColor)
End With
End If
End Sub

Nun möchte ich jeweils spaltenweise zählen, wenn sich die Farbe zu schwarz ändert.
Dazu habe ich diese Function im Netz gefunden und in ein Modul eingetragen:

Public Function CountCcolor(range_data As Range, criteria As Range) As Long
Dim datax As Range
Dim xcolor As Long
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
If datax.Interior.ColorIndex = xcolor Then
CountCcolor = CountCcolor + 1
End If
Next datax
End Function

In der Zelle E5 habe ich folgenden Eintrag: =CountCcolor(E6:E65;BG3)
E6:E65 ist der Zellbereich der überwacht wird, Zelle BG3 habe ich schwarz gefüllt, als Referenz.
Wenn ich nun in die Zelle E5 klicke und mit Enter abschließe, zählt er die schwarzen Zellen im Bereich E6:E65, auch das ist gut.
Problem ist aber, das bei klick in eine Zelle die sich dann schwärzt, nicht erneut gezählt wird....
Wie muss ich das angehen?
Herzlichen Dank!
Gruß Mario

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Function in Sub einbinden...?!
26.01.2021 08:45:58
volti
Hallo,
versuche es mal it Volotile
Code:

[Cc]

Public Function CountCcolor(range_data As Range, criteria As Range) As Long Dim datax As Range Dim xcolor As Long Application.Volatile xcolor = criteria.Interior.ColorIndex For Each datax In range_data If datax.Interior.ColorIndex = xcolor Then CountCcolor = CountCcolor + 1 End If Next datax End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Function in Sub einbinden...?!
26.01.2021 08:56:25
M.Bacher
Hallo Karl-Heinz,
ich habe Deinen Vorschlag in der Function geändert und die Zeile Application.Volatile
eingefügt. Das ändert aber leider nichts an der automatischen Zählung.
Eigentlich müsste ich doch im Worksheet_SelectionChange jedesmal die Zählung durchführen, wenn ich in eine Zelle klicke und die sich dann schwarz färbt...
So als laienhafte Zusammenfassung:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set changeRange = Range("E6:BE57")
intColor = 0 'Schwarz
If Not Application.Intersect(changeRange, Target) Is Nothing Then
With Target.Interior
.Color = IIf(.Color = intColor, xlNone, intColor)
End With
End If
CountCcolor
End Sub

Also nach der End if im Sub noch die Function ausführen. Das funktioniert aber nicht...
Gruß Mario
Anzeige
AW: Function in Sub einbinden...?!
26.01.2021 08:47:19
volti
Hallo,
versuche es mal mit Application.Volatile:
Code:

[Cc]

Public Function CountCcolor(range_data As Range, criteria As Range) As Long Dim datax As Range Dim xcolor As Long Application.Volatile xcolor = criteria.Interior.ColorIndex For Each datax In range_data If datax.Interior.ColorIndex = xcolor Then CountCcolor = CountCcolor + 1 End If Next datax End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Function in Sub einbinden...?!
26.01.2021 08:50:49
Nepumuk
Hallo Mario,
einfach so:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Range("E6:BE57"), Target) Is Nothing Then
        With Target.Interior
            .Color = IIf(.Color = 0, xlNone, 0)
            Calculate
        End With
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Function in Sub einbinden...?!
26.01.2021 08:56:44
Nepumuk
Hallo Mario,
eine Kombination aus Karl-Heinz Vorschlag und meinem ist die Lösung.
Gruß
Nepumuk
AW: Function in Sub einbinden...?!
26.01.2021 08:58:54
M.Bacher
Hallo Nepumuk!
WAHNSINN! Das ist es! Herzlichen Dank!
Schönen Tag an alle Helfer
Gruß Mario
AW: Function in Sub einbinden...?!
26.01.2021 10:08:13
Daniel
Naja da wurde schon viel drüber geschrieben:
Das Ändern einer Formatierung löst keine Neuberechnung der Formel, dass macht nur eine Änderung das Wertes einer Zelle, auf die sich die Formel bezieht.
Was hingegen immer eine Neuberechnung auslöst ist, wenn die Zelle per Copy-Paste geändert wurde, auch wenn dabei nur die Formatierung über tragen wurde.
Lege also als Vorlage zwei Zellen an und färbe sie entsprechend ein.
Im SelectionChange-Makro änderst du dann die Farbe, indem du eine der Vorlagenzellen mit .Copy kopierst und das Format mit Target.PasteSpecial xlpasteformats auf Target überträgst.
Es schadet auch nicht, in der Zählfunktion die Zeile

Application. volatile
Einzufügen, dann wird die Formel neu berechnet, sobald sich irgendein Zellwert änderst, dh bei jeder Änderung, auch wenn die Formel keinen Bezug auf diese Zelle hat, dann kannst du zumindest mit einer einzigen Aktion alle Farbenzählformeln auf den neusten Stand bringen.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige