Hallo Holger,
Du mußt zwei Dinge sorgfältig unterscheiden, ich weiß das Thomas es weiß aber er hat es nicht so ganz klar hingeschrieben.
Eine solche Konstruktion:
function foo ( oRange )
for i = oRange.getRangeAddress.startRow to ...
end function
wäre rein wie sie dasteht nicht behindert, solange Du nur lesen willst. Zugegeben geht es praktisch nicht, aber nicht vorrangig weil Du den CellRange nicht als Objekt übergeben kannst, sondern weil Du mit einer Funktion nicht schreibend auf Zellen zugreifen kannst.
Eine Funktion liefert immer nur einen Rückgabe
wert, keine Rückgabe
aktion die auf Zellen angewendet werden kann - alle Zellen des aktuellen Blattes sind gegen Veränderungen gesperrt solange eine Funktion läuft, die Wertänderung in der Zelle wo die Funktion steht ist nur der Rückgabewert der Funktion.
Ich hoffe einigermaßen verständlich.
Eine Parameterübergabe in Form eines Arrays welches die reinen Zellwerte repräsentiert ist hingegen problemlos möglich, auch so das die Bereiche sich automatisch anpassen.
Beispiel:
(
http://www.bcwin.ch/ooo/basic/calc/calc.html )
Code: Alles auswählen
Function summenTest ( vArgument as Variant )
' ist das argument ein Array (Zellbereich)
if Not IsArray(vArgument) then
' ist der einzelne Wert numerisch
if IsNumeric( vArgument ) then
' Rückgabewert ist gleich Eingabewert
summenTest = vArgument
else
' Summe ist gleich 0 wenn kein numerischer Wert
' übergeben wurde
summenTest = 0
end if
' funktion beenden
exit function
End If
Dim nSumme as Long
Dim i as Integer
Dim j as Integer
' der spätere Rückgabewert
nSumme = 0
' Schleife durch 1 Dimension (Zeilen)
for i=1 to UBound(vArgument,1)
' Schleife durch zweite Dimension (Spalten)
for j=1 to UBound(vArgument,2)
' numerisch?
if IsNumeric( vArgument(i,j) ) then
' Wert dazuzählen
nSumme = nSumme + vArgument(i,j)
end if
next j
next i
' Rückagbewert in Zelle
summenTest = nSumme
End Function
Sowas läuft also, läuft auch so das beim Aufruf mittels:
=SUMMENTEST(A1:D5)
automatische Aktualisierung des Bereiches in der Formel selbst erfolgt wenn Du sie auf dem Blatt kopierst. Die Einschränkung ist eben nur das Dir bei dieser Art der Handhabung ausschließlich die Zellwerte des Bereiches zur Verarbeitung in Deiner benutzerdefinierten Funktion zur Verfügung stehen.
Gruß
Stephan