Das wäre dann unabhängig von einem Cursor und dem Datenbereich und ist recht perform durch Verzicht auf Iterationen mit Hilfe einer Schleife.
Die Daten der Spalte können auch Lücken haben - es wird immer die letzte benutzte Zelle zurückgeliefert.
Der Code könnte noch kürzer sein, doch werden die beiden sehr unwahrscheinlichen Fälle mit behandelt: Die Spalte ist bis zum Ende gefüllt und nur die letzte Zeile ist leer....
Vielleicht kann es ja jemand brauchen:
Code: Alles auswählen
'/** getLastUsedColumnCell()
'*************************************************************************.
'* @kurztext liefert die letzte benutzte Zelle einer Spalte
'* Die Funktion liefert die letzte benutzte Zelle einer Spalte, die Spalte muss nicht durchgängig
'* befüllt sein.
'*
'* @param1 oSheet as object die Calc-Tabelle (Tabellenblatt) als objekt
'* @param2 sSpalte as string die Spaltenbezeichnung - also z.B. "a" oder "ABC"
'*
'* @return oZelle as object das Objekt der letzten benutzten Zelle
'*************************************************************************
'*/
function getLastUsedColumnCell(oSheet as object, sSpalte as string)
dim oZelle as variant 'letzte benutzte Zelle
dim oBereich as variant 'Zellbereich Spalte
dim oListe as variant 'Objekt aller unbenutzten Zellen
dim oLztBereich as Variant 'letzer leerer Zellbereich oder letze leere Zelle
oBereich = oSheet.getCellRangeByName(sSpalte & ":" & sSpalte)
REM nun zuerst prüfen, ob die letzte Zelle des Bereiches überhaupt leer ist - sonst Zelle Zurückliefern
if NOT (oSheet.getCellByPosition(oBereich.RangeAddress.startColumn, oBereich.RangeAddress.endRow).type = 0) then
oZelle = oSheet.getCellByPosition(oBereich.RangeAddress.startColumn, oBereich.RangeAddress.endRow)
else
REM jetzt alle Leeren Zellen abrufen und den letzten Eintrag wählen und auswerten
oListe = oBereich.queryEmptyCells()
oLztBereich = oListe(ubound(oListe.getElementNames))
REM Unterscheidung ob einzelne Zelle oder Zellbereich
if oLztBereich.supportsService("com.sun.star.sheet.SheetCell") then 'einzelne Zelle (wäre die letzte Zelle der Spalte - sehr unwahrscheinlich!)
oZelle = oSheet.getCellByPosition(oLztBereich.CellAddress.Column, oLztBereich.CellAddress.Row-1)
elseif oLztBereich.supportsService("com.sun.star.sheet.SheetCellRange") then 'Zellbereich (die wahrscheinlichste option!)
oZelle = oSheet.getCellByPosition(oLztBereich.RangeAddress.startColumn, oLztBereich.RangeAddress.startRow-1)
end if
end if
GetLastUsedColumnCell = oZelle
end function
Code: Alles auswählen
sub test_LetzteZelle
oSheet = ThisComponent.sheets.getbyName("Neu")
oZelle = GetLastUsedColumnCell(oSheet,"D")
msgbox oZelle.string
end sub