Макрос Применить автофильтр

Автор Vasmart, 4 февраля 2017, 21:06

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

Vasmart

Добрый день!

Прошу помочь с написанием макроса в Libreoffice
"Нажимаем на рисунок >> запускае автофильтр на странице"

В Excel он был

Sub Рисунок2_Щелчок()
ActiveSheet.AutoFilter.ApplyFilter
End Sub

не могу найти варианты

rami

Цитата: Vasmart от  4 февраля 2017, 19:06Прошу помочь с написанием макроса в Libreoffice
"Нажимаем на рисунок >> запускает автофильтр на странице"
Курсор должен находиться внутри данных, выполните макрос:
Sub Main
Dim document As Object, dispatcher As Object
document=ThisComponent.CurrentController.Frame
dispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DataFilterAutoFilter", "", 0, Array())
End Sub

Vasmart

Не получается, а вообще как можно автоматически обновлять автофльтр при измненении данных в исходной таблице

rami

Цитата: Vasmart от  4 февраля 2017, 21:28
Не получается, а вообще как можно автоматически обновлять автофльтр при изменении данных в исходной таблице
Почитайте в Справке что такое Автофильтр, попробуйте поработать с ним вручную, а затем сформулируйте заново ваш вопрос.

Vasmart

У меня есть 2 таблицы в разных листах.

В таблицу 1 вводятся данные вручную (опросный лист),
а в таблице 2 на втором листе отображются строки с введенными данными, стоит автофильтр >0,
хочется этот автофильтр обновлять при открытии листа или нажатем, например, кнопки

Vasmart


rami

#6
Просто пишите данные в таблицах.

Vasmart

#7
Цитата: rami от  4 февраля 2017, 23:21
Просто пишите данные в таблицах.
Спасибо! Идеальный вариант!

у меня будет 5 таких листов по 5 сериям
т.е. будут листы ИТОГО, ИТОГО1, ИТОГО5  как в макросе это учесть, т.к. расчет прописан только
для листа ИТОГО

Sub Main  Dim oRange, oFilterDesc
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
oRange=ThisComponent.Sheets.getByName("ИТОГО").getCellRangeByName("A7:E208")  'диапазон фильтра
oFilterDesc=oRange.createFilterDescriptor(True)
oFields(0).Field=4
oFields(0).Operator=com.sun.star.sheet.FilterOperator.GREATER
oFields(0).IsNumeric=true
oFields(0).NumericValue=0
oFilterDesc.setFilterFields(oFields())
oFilterDesc.ContainsHeader=False 'без учета заголовка
oRange.filter(oFilterDesc)
End Sub

rami

Цитата: Vasmart от  5 февраля 2017, 06:40у меня будет 5 таких листов по 5 сериям
т.е. будут листы ИТОГО, ИТОГО1, ИТОГО5  как в макросе это учесть, т.к. расчет прописан только
для листа ИТОГО
Сделать цикл для каждого листа со своими параметрами фильтрации.

Vasmart

Цитата: rami от  5 февраля 2017, 11:28
Цитата: Vasmart от  5 февраля 2017, 06:40у меня будет 5 таких листов по 5 сериям
т.е. будут листы ИТОГО, ИТОГО1, ИТОГО5  как в макросе это учесть, т.к. расчет прописан только
для листа ИТОГО
Сделать цикл для каждого листа со своими параметрами фильтрации.
Спасибо! Разобрался!