Calc: Range an Funktion übergeben - Leere Zellen erkennen
Verfasst: Sa, 17.08.2013 13:48
Ich möchte per selbst geschriebener Funktion die letzte benutzte Zelle eines Bereiches in die aktuelle Zelle übernehmen. Beispiel: Ich habe in den Zellen G10-Gxx den jeweils aktuellen Kontostand und möchte den untersten Wert in G9 übernehmen. Also definiere ich in G9 die Funktion =LASTVALUEINCOLUMN(G10:G31), damit die Funktion aufgerufen wird, wenn sich in diesen Zellen etwas verändert. Durch Einfügen von Leerzellen vor der letzten Zeile lässt sich dieser Bereich beliebig vergrößern, ohne dass ich jedes Mal die Übergabeparameter nachziehen muss.
Mein Code sieht nun so aus (Fehlerprüfung entfernt, Range als Parameter erwartet):
Mein Problem ist nun, dass ich keine Leerzellen erkenne, die es ja in dem Range (z.B. am Ende) gibt. Beim Funktionsaufruf wird der Range ja nicht als Objekt, sondern als Array übergeben und da habe ich nun nur Werte vorliegen. In diesem Fall steht Null (dezimal 0) drin, wenn der Kontostand ausgeglichen ist und wenn die Zelle leer ist.
Kann ich irgendwie erkennen, ob in den Zellen im übergebenen Range eine Zahl (in diesem Fall eine Währung) oder nichts drin steht? Oder kann ich den Übergabeparameter irgendwie als String bekommen, um darauf Zell-Objekte aufzubauen und einen Vergleich auf EMPTY durchzuführen? Ich darf hier leider keinen reinen String übergeben, da sonst keine Aktualisierung bei Zelländerungen in diesem Bereich stattfinden würde.
Nachtrag: Ich habe mir jetzt erst einmal geholfen, indem ich in die Zelle einen Leerstring hineinschreibe. Damit ist der Standarwert "0" jetzt nicht mehr in den Leerzellen enthalten. Dennoch würde es mich interessieren, ob man irgendwie "Objekte" wie in Excel an eine Funktion übergeben kann und nicht nur ein Array mit Zellwerten. Schließlich wirbt OO Basic doch immer mit den Vorzügen der objektorientierten Programmierung.
Mein Code sieht nun so aus (Fehlerprüfung entfernt, Range als Parameter erwartet):
Code: Alles auswählen
Function LastValueInColumn(x)
For iRow = LBound(x,1) To UBound (x,1)
For iCol = LBound(x,2) To UBound(x,2)
If Trim(x(iRow,iCol)) <> "" Then
LastValueInColumn = x(iRow,iCol)
End If
Next iCol
Next iRow
End Function
Kann ich irgendwie erkennen, ob in den Zellen im übergebenen Range eine Zahl (in diesem Fall eine Währung) oder nichts drin steht? Oder kann ich den Übergabeparameter irgendwie als String bekommen, um darauf Zell-Objekte aufzubauen und einen Vergleich auf EMPTY durchzuführen? Ich darf hier leider keinen reinen String übergeben, da sonst keine Aktualisierung bei Zelländerungen in diesem Bereich stattfinden würde.
Nachtrag: Ich habe mir jetzt erst einmal geholfen, indem ich in die Zelle einen Leerstring hineinschreibe. Damit ist der Standarwert "0" jetzt nicht mehr in den Leerzellen enthalten. Dennoch würde es mich interessieren, ob man irgendwie "Objekte" wie in Excel an eine Funktion übergeben kann und nicht nur ein Array mit Zellwerten. Schließlich wirbt OO Basic doch immer mit den Vorzügen der objektorientierten Programmierung.