Es gibt noch einen gravierenden Fehler in deiner Funktion. Diese Analyse kannst du auch als Tipp ansehen, wie du Fehler finden kannst, bzw. ist es auch ein Hinweis darauf, Zwischenschritte daraufhin zu testen, ob sie machen, was du möchtest.
Deine Grundfunktion sieht so aus:
Public Function ANZAHLBUCHSTABEN(ParamArray Args() As Variant) As Integer
Dim sum As Integer
'Alle Parameter durchlaufen
For i = LBound(Args) To UBound(Args)
sum = sum + 1
Next
ANZAHLBUCHSTABEN = sum
End Function
Bei Anwendung sollte also die Anzahl der ausgewählten Zellen ausgewiesen werden. Das passiert aber nicht. Es steht immer 1 da. Wenn du die Funktion folgendermaßen erweiterst, siehst du, dass der Übergabeparameter Args() gar keinen Inhalt hat:
Public Function ANZAHLBUCHSTABEN(ParamArray Args() As Variant) As Integer
Dim sum As Integer
'In der MessageBox wird immer 0 angezeigt
MsgBox UBound(Args)
'Alle Parameter durchlaufen
For i = LBound(Args) To UBound(Args)
sum = sum + 1
Next
ANZAHLBUCHSTABEN = sum
End Function
Was bedeutet das? Offensichtlich, dass dein Übergabeparameter so nicht funktioniert. Was du übergeben musst ist eine Variable vom Datentyp Range. Um jede Zelle im übergebenen Bereich anzusprechen, musst du die Schleife ändern:
Public Function ANZAHLBUCHSTABEN(Args As Range) As Long
Dim sum As Long
Dim cell As Range
'Alle Zellen im Übergabeparameter args durchlaufen
'und summieren
For Each cell In Args
sum = sum + 1
Next cell
ANZAHLBUCHSTABEN = sum
End Function
|