VBA-Funktion wird nicht automatisch aktualisiert
#1
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?
Antworten Top
#2
Application.volatile
[-] Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:
  • perostojkov
Antworten Top
#3
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:
  • perostojkov
Antworten Top
#4
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
Antworten Top
#5
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)
Antworten Top
#6
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
Antworten Top
#7
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)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste