Удаление строк по условию не равно значению столбца

Автор akkinak, 14 января 2016, 22:13

0 Пользователи и 1 гость просматривают эту тему.

akkinak

Приветствую!
Мне нужно макрос что бы удалял строки из таблицы по условию не равно значению
столбца 01.01.2001, т.е. строки у которых в столбце с датой отличающейся от 01.01.2001(последний столбец)
были удалены. Использовал код:
Sub NDRowsDelete
odoc=thiscomponent
oSheet = oDoc.CurrentController.getActiveSheet()
myrows=oSheet.getrows

rowmax=60
rowmin=10

For i=rowmax To rowmin step -1
textnd = osheet.getcellbyposition(1,i).string
    If textnd <> "01.01.2001" Then
      myrows.removebyindex(i,1)
    End if   
Next i

End Sub

Что то не работает. Подскажите пожалуйста что нужно изменить?

JohnSUN

#1
Добро пожаловать на форум!
Цитата: akkinak от 14 января 2016, 22:13
Что то не работает. Подскажите пожалуйста что нужно изменить?
Что именно не работает? У меня на тестовых данных этот код честно убрал строки вида "01.01.01" и оставил строки "01.01.2001". Возможно, дело именно в формате ячеек?

PS Я сейчас одну глупую вещь спрошу - только ты не обижайся: ты ведь в курсе, что твой макрос проверяет значения в колонке B, да?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

akkinak

Конечно же не обижаюсь, в макросах полный профан :)
мне нужно например , для колонки Е, это так:
myrows.removebyindex(i,4)?

akkinak

т.е. для кононки Е код должен быть так?
Sub NDRowsDelete
odoc=thiscomponent
oSheet = oDoc.CurrentController.getActiveSheet()
myrows=oSheet.getrows

rowmax=60
rowmin=10

For i=rowmax To rowmin step -1
textnd = osheet.getcellbyposition(4,i).string
    If textnd <> "01.01.2001" Then
      myrows.removebyindex(i,4)
    End if   
Next i

End Sub

JohnSUN

#4
Ну да... A=0, B=1, C=2 и т.д. Всё верно. Ну, и формат даты тоже проверь - она в ячейке должна выглядеть именно так, как записана в константе в макросе

А вот в removebyindex единичку на четвёрку зря... не надо этого было делать... Там "один" обозначает количество удаляемых строк...

Ещё раз, чуть подробнее:
getcellbyposition(4,i) считывает с листа ячейку из i-той строки и 4-ой колонки (нумерация с нуля, значит из E)
removebyindex(i - удаляет с этой i-той строки столько строк, сколько указано во втором параметре
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

akkinak

уф... привел макрос к виду
Sub NDRowsDelete
odoc=thiscomponent
oSheet = oDoc.CurrentController.getActiveSheet()
myrows=oSheet.getrows

rowmax=9999
rowmin=0

For i=rowmax To rowmin step -1
textnd = osheet.getcellbyposition(4,i).string
    If textnd <> "'01.01.2001" Then
      myrows.removebyindex(i,1)
    End if   
Next i

End Sub

он то работает, то не работает, не пойму почему.

rami

Цитата: akkinak от 16 января 2016, 18:02он то работает, то не работает, не пойму почему.
Выложите образец документа.

akkinak


rami

Цитата: akkinak от 16 января 2016, 18:02он то работает, то не работает, не пойму почему.
Макрос работает на 74% впустую. Почему? Он перебирает в цикле 9999 строк из которых 2592 имеют данные, а остальные пустые. А ещё макрос удаляет заголовок таблицы ???
В строке кода If textnd <> "'01.01.2001" Then нужно убрать апостроф.

А вообще такие задачи решаются фильтром.