Выполнить поиск на странице макросом

Автор OOKapitan, 7 февраля 2018, 14:02

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

bigor

Цитата: OOKapitan от  9 февраля 2018, 14:15чтобы поиск шёл только по видимым строкам

C поиском ничего не сделаешь :(
Можно обрабатывать результаты поиска, что бы игнорировать скрытые строки/столбцы.

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от  9 февраля 2018, 15:33Можно обрабатывать результаты поиска, что бы игнорировать скрытые строки/столбцы.
Как?
Скажем значение нашлось в ячейке B5, но эта строка скрыта. Как мне списке адресов, в которых нашлось искомое, не выводить этот адрес?

bigor

проверяешь строку 5, если скрыта значение не выводишь
типа так
if oFound.getByIndex(i).getRows().IsVisible then
показываем
end if
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

#18
Цитата: Bigor от  9 февраля 2018, 15:49проверяешь строку 5
Где в коде указан номер строки? Или как его указать? И если мне надо наоборот записать "если скрыт" - то я должен писать if oFound.getByIndex(i).getRows().IsHidden then?[/s]
Разобрааааааался! Огромнейшее-приогромнейшее СПАСИБИЩЕ!

bigor

нету в коде 5-й строки :) он просматривает все найденное и выводит результат только видимых ячеек. (хотя я его не проверял)

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от  9 февраля 2018, 16:01нету в коде 5-й строки
Цитата: Bigor от  9 февраля 2018, 15:49проверяешь строку 5, если скрыта значение не выводишь
типа так
:o

bigor

Ну пока писал, нашел более оптимальный метод :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 12 февраля 2018, 15:58Ну пока писал, нашел более оптимальный метод
Ясно  ;D . Большущее спасибо.

OOKapitan

     Здравствуйте, снова.
     Возник новый вопрос по указанному коду. Точнее код чуть-чуть переделан. Дело в том, что мне нужно, чтобы поиск осуществлялся по шести листам. И я переделал код так:
     
Dim desc, oFind, s, a, r, k, b, c, d
oDoc=ThisComponent
For i=0 To 6
oSheet = oDoc.Sheets(i)
desc=oSheet.createSearchDescriptor()
desc.SearchRegularExpression=false
desc.SearchString="Строка поиска"   'Что найти
desc.SearchWords=true      'Ячейку целиком
oFind=oSheet.findAll(desc)
s=oFind.RangeAddressesAsString
r=s.StartRow
oSheet.getCellByPosition (5, r).Value=1
Next i
End Sub

    Однако данный макрос вылетает на строке r=s.StartRow с ошибкой, что переменная типа Object не установлена. Подскажите, как это исправить, пожалуйста.

bigor

RangeAddressesAsString возвращает строку.
В твоем случае нужно использовать getRangeAddresses()
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 27 февраля 2018, 15:32В твоем случае нужно использовать getRangeAddresses()
И как это сделать? Напиши (можно на ты?) пример кода, пожалуйста.

bigor

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 27 февраля 2018, 16:36так я уже приводил примеры выше
Не понял о чём ты. Поменял в макросе выше RangeAddressesAsString на getRangeAddresses() - всё-равно ошибка. Что делаю не так?

bigor

#28
В скобках ноль поставил? должно быть так:
oFind.RangeAddresses(0).StartRow

p.s.
обрабатывать будет только первое нахождение.
и зачем тебе 2 переменных s и  r  ?
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 28 февраля 2018, 09:43обрабатывать будет только первое нахождение.
А как чтобы по очереди все?