Registriert seit: 11.07.2017
Version(en): 2016
17.08.2024, 07:02
(Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2024, 07:02 von perostojkov.)
Hallo, ich habe eine VBA-Funktion erstellt (im Netz gefunden), um fett formatierte Zellen in einem Bereich zu zählen:
Code:
Function CountBold(Rng As Range) As Long
Dim Cell As Range
For Each Cell In Rng
If Cell.Font.Bold Then
CountBold = CountBold + 1
End If
Next Cell
End Function
B16=countbold(A16:A36)
Die Funktion wird nicht automatisch aktualisiert, wenn ich die Fettschrift ändere. Gibt es eine Möglichkeit, die Funktion automatisch aktualisieren zu lassen oder einen anderen Lösungsansatz, um das Problem zu beheben?
Registriert seit: 12.06.2020
Version(en): 2021
Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:1 Nutzer sagt Danke an ralf_b für diesen Beitrag 28
• perostojkov
Registriert seit: 12.08.2019
Version(en): Office 365
Hallo P.,
eine Formatänderung löst in Excel kein change-Ereignis aus. Deshalb wird keine Neuberechnung ausgelöst.
Füge - wie bereits gesagt - ein "Application.Volatile" im Code ein.
Aber auch dann musst du mit "PF9" eine Neuberechnung per Hand anstoßen.
Gruß Sigi
Folgende(r) 1 Nutzer sagt Danke an Sigi.21 für diesen Beitrag:1 Nutzer sagt Danke an Sigi.21 für diesen Beitrag 28
• perostojkov
Registriert seit: 11.07.2017
Version(en): 2016
Ich habe doch im Internet eine Lösung gefunden, die mein Problem löst.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'...My Code
ElseIf Not Intersect(Target, Range("ac16:ad34,ac57:ad75")) Is Nothing Then
Application.Calculation = xlCalculationManual
Range("B16").Calculate
Application.Calculation = xlCalculationAutomatic
'...My Code
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
18.08.2024, 08:45
(Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2024, 08:45 von RPP63.)
Moin!
Ich zitiere Sigi:
Zitat:eine Formatänderung löst in Excel kein change-Ereignis aus
Daran ändert auch Deine "Lösung" nichts!
Du kannst das ja problemlos nachstellen:
Ändere eine Zelle im Zielbereich von Bold auf normal (oder vice versa).
Dein CountBold-Ergebnis wird sich
nicht ändern!
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 11.07.2017
Version(en): 2016
Zweite Lösung für mich gefunden:
Wenn man die Funktion über VBA ausführt, kann sie aufgerufen werden, ohne dass sie als Formel verwendet werden muss.
CountBold(Range("A16:A36")
Eine manuelle Berechnung entfällt, das Ergebnis wird in Zelle B16 geschrieben oder man arbeitet damit in VBA weiter.
Ich habe außerdem eine optimierte Funktion gefunden, die besser funktioniert, wenn man die Anzahl der fett formatierten Zellen benötigt und sicherstellen möchte, dass verbundene Zellen nur einmal gezählt werden .
Code:
Function CountBold1(Rng As Range) As Long
Dim Cell As Range
Dim Count As Long
Dim i As Long
For Each Cell In Rng
' Überprüft jede Zelle im angegebenen Bereich
If Cell.Value <> "" Then
For i = 1 To Len(Cell.Value)
' Überprüft, ob irgendein Zeichen in der Zelle fett formatiert ist
If Cell.Characters(i, 1).Font.Bold Then
Count = Count + 1
Exit For ' Sobald eine fett formatierte Stelle gefunden ist, verlässt die Schleife die Zelle
End If
Next i
End If
Next Cell
CountBold1 = Count
End Function
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
19.08.2024, 04:44
(Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2024, 04:45 von RPP63.)
Dass das jetzt überhaupt nichts mehr mit der Frage aus der Threaderöffnung zu tun hat, dürfte Dir klar sein.
(17.08.2024, 07:02)perostojkov schrieb: Die Funktion wird nicht automatisch aktualisiert, wenn ich die Fettschrift ändere. Gibt es eine Möglichkeit, die Funktion automatisch aktualisieren zu lassen oder einen anderen Lösungsansatz, um das Problem zu beheben?
Diese Frage wurde beantwortet.
Es geht nicht, weil eine Formatänderung für VBA kein Ereignis darstellt!
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)