Twoje makro przenosi cały blok. To jest w porządku, bo trwa krócej niż przenoszenie komórka po komórce. Pytanie, czy chcesz ten blok mieć w całości?
Jeżeli tak, to trzeba znaleźć pierwszą pustą komórkę w danej kolumnie. Szkic poniżej.
Kod: Zaznacz cały
Sub Test_DoPierwszejPustejWKolumnie()
nr_arkusza = 2
nr_kolumny = 0
nr_wiersza = 0
arkusz = thisComponent.Sheets.getByIndex(nr_arkusza)
do while not IsCellRangeEmpty(arkusz.getCellByPosition(nr_kolumny, nr_wiersza))
nr_wiersza = nr_wiersza + 1
loop
Dim oCellAddress As New com.sun.star.table.CellAddress
oCellAddress.Sheet = nr_arkusza
oCellAddress.Column = nr_kolumny 'kolumna do której mają być przeniesione dane
oCellAddress.Row = nr_wiersza 'początek wklejania
rem dalej Twój kod, albo opakuj to w funkcję
End Sub
Function IsCellRangeEmpty(oRange) As Boolean
Dim oRanges 'Ranges returned after querying for the cells
Dim oAddrs() 'Array of CellRangeAddress
oRanges = oRange.queryContentCells(_
com.sun.star.sheet.CellFlags.VALUE OR _
com.sun.star.sheet.CellFlags.DATETIME OR _
com.sun.star.sheet.CellFlags.STRING OR _
com.sun.star.sheet.CellFlags.FORMULA)
oAddrs() = oRanges.getRangeAddresses()
IsCellRangeEmpty = UBound(oAddrs()) < 0
End Function
Użycie pętli while jest, że tak powiem, oczywiste. Funkcja sprawdzająca pustość zakresu, autorstwa Andrew Pitonyaka, pochodzi z
http://www.oooforum.org/forum/viewtopic.phtml?t=12879
Prościej się nie da. Możesz testować komórkę na zawartość różną od "", ale to nie zda egzaminu jeżeli pusty napis będzie wyliczony prze formułę. Dlatego trzeba analizować koniunkcję zdań typu (Komórka nie posiada zawartości typu A) po wszystkich możliwych typach zawartości A.