Ich habe mir eine Funktion gebaut, welche mir bestimmte Werte zusammenzählen soll, wenn jedoch alle Zellen leer sind, soll auch EMPTY rauskommen.
Das Ding funktioniert im wesentlichen, jedoch nur wenn ich eine Range innerhalb einer Tabelle angebe. Wenn ich eine Tabellen-Quer-Range "Tabelle1:Tabelle4!E63" angebe, wird mein Makro gar nicht aufgerufen und als Ergebnis #WERT eingetragen.
Meine Vermutung ist, dass es im Objektmodell einen Unterschied zwischen "A62:A64" (was eine RANGE ist) und "Tabelle1:Tabelle4!A63" gibt. Aber welche Objekttyp ist so eine Tabellenübergreifende Range?
Meine Funktion:
'################################################################
' Liefert eine Summe aus einem Bereich zurück
' Wenn alle Zellen des Ranges leer sind, wird EMPTY zurückgegeben
' Written by: Johann Kellner
' Übergabe:
' Zellbereich der zu untersuchen ist
' Rückgabe
' Summe oder Empty
Function KreuzSumNum(Bereich As Range) As Variant
Dim AllEmpty As Boolean ' Wenn alle Ergebnisse leer sind
Dim ErgSum As Double ' Zahlensumme
Dim WI1 As Integer
Dim Zelle As Object ' Zellen-Objekt für Suche
Dim VABer As Range
AllEmpty = True ' Annahme, dass alles leer ist
ErgSum = 0 ' Summe auf Null stellen
For Each Zelle In Bereich
WI1 = VarType(Zelle.Value) ' hole den typ
If WI1 = vbInteger _
Or WI1 = vbLong _
Or WI1 = vbSingle _
Or WI1 = vbDouble _
Or WI1 = vbCurrency _
Or WI1 = vbDecimal _
Then
ErgSum = ErgSum + Zelle.Value ' Zellenwert dazuaddieren
AllEmpty = False ' indikator für alles LEER löschen
Else ' Wenn kein nummerischer Wert war
If Not IsEmpty(Zelle.Value) = True Then
AllEmpty = False ' indikator für alles LEER löschen
End If
End If
Next Zelle
If AllEmpty Then
KreuzSumNum = Empty
Else
KreuzSumNum = ErgSum
End If
End Function
------------------------------