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:
1 2 3 4 5 6 7 8 9 10 11 | Public Function ANZAHLBUCHSTABEN( ParamArray Args() As Variant ) As Integer
Dim sum As Integer
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Public Function ANZAHLBUCHSTABEN( ParamArray Args() As Variant ) As Integer
Dim sum As Integer
MsgBox UBound(Args)
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Public Function ANZAHLBUCHSTABEN(Args As Range) As Long
Dim sum As Long
Dim cell As Range
For Each cell In Args
sum = sum + 1
Next cell
ANZAHLBUCHSTABEN = sum
End Function
|
|