Форум поддержки пользователей LibreOffice, Apache OpenOffice

Главная категория => Calc => Тема начата: Abell от 5 мая 2014, 10:40

Название: Как в макросе определить строку элемента управления
Отправлено: Abell от 5 мая 2014, 10:40
Доброго времени!
Прошу прощения за ламерский вопрос.
В таблице Calc есть несколько элементов управления "Флажок", все они вызывают один макрос. Макрос обрабатывает две ячейки в одной строке.

Вопрос, как в макросе определить строку таблицы, в которой находится вызывающий элемент?
Или, в общем случае, где найти и как определить все свойства и методы вызывающего макрос элемента?

Заранее спасибо!

P.S. Вариант с перебором всех элементов и обработкой всех строк рассматривал, но получается очень неэффективно :(
P.P.S. Свойства и методы очень удобно было видеть в Delphi - там после точки сразу был список всего, или по Ctrl+Space выпадал, здесь такого нет, и документации никак не найду :(
Название: Re: Как в макросе определить строку элемента управления
Отправлено: JohnSUN от 5 мая 2014, 12:51
Попробуй почитать файл из этого сообщения (http://forumooo.ru/index.php/topic,1660.msg24901.html#msg24901)
Название: Re: Как в макросе определить строку элемента управления
Отправлено: Abell от 5 мая 2014, 13:12
К сожалению, такого у меня нет. Возможно, другая версия или не знаю где искать, но ничего подобного не нахожу.
У меня OpenOffice 3.2.1
Название: Re: Как в макросе определить строку элемента управления
Отправлено: JohnSUN от 5 мая 2014, 13:22
Это ты про "события листа"? Я не о том, я о параметре oEvent в макросе и о способе посмотреть его состав
Название: Re: Как в макросе определить строку элемента управления
Отправлено: Abell от 5 мая 2014, 13:29
Спасибо, поизучаю внимательней, о результатах сообщу.

Пока обошелся следующим корявым кодом:

DIM tSheet As Object
rem Задаем начальную строку и количество строк
bRow=4
cRow=65
rem Получаем активный лист
tSheet=ThisComponent.GetCurrentController().GetActiveSheet()
For i=bRow To cRow
If tSheet.GetCellByPosition(1,i).GetString Then
  tSheet.GetCellByPosition(3,i).Value=tSheet.GetCellByPosition(2,i).Value
Else
  tSheet.GetCellByPosition(3,i).Value=0
EndIf
Next
Название: Re: Как в макросе определить строку элемента управления
Отправлено: JohnSUN от 5 мая 2014, 14:19
Кинул бы образец листа - уже нарисовали бы пристойное решение. Впрочем, если решение кажется корявым, но работает, значит не такое уж оно и корявое
Название: Re: Как в макросе определить строку элемента управления
Отправлено: Abell от 5 мая 2014, 16:05
Да, радоваться рано... Когда уже думал, что закончил, появился ряд глюков. Самый серьезный и непонятный - макрос устойчиво вызывается только из первого элемента. Один раз каким-то чудом сработал из восьмого. :(
Наверное, придется перелопачивать вручную все заново, потому что видимых причин такого поведения офиса я не наблюдаю.
События элементов у всех одинаковые, макрос один. По первому элементу срабатывает, по остальным нет. Сам макрос, когда все-таки вызывается, работает устойчиво.
В общем, голову сломал, но так и не понял.  ???
Вот этот чудесный файл вложил, завтра буду разбираться  :-\
Название: Re: Как в макросе определить строку элемента управления
Отправлено: rami от 5 мая 2014, 20:40
Если я правильно вас понял, должно быть так, как я сделал с 5 по 30 строчку. У вас были "двухэтажные скворечники". Один "этаж" вы отредактировали, а другой все были копия первого элемента.
Название: Re: Как в макросе определить строку элемента управления
Отправлено: Abell от 6 мая 2014, 06:04
Спасибо, я уже тоже исправил :) Так и не нашел в среде разработки инспектора объектов и событий, так что делаю все методом проб и, естественно, ошибок.
Название: Re: Как в макросе определить строку элемента управления
Отправлено: Yakov от 6 мая 2014, 09:07
Цитата: Abell от  6 мая 2014, 05:04Так и не нашел в среде разработки инспектора объектов и событий
Это можно сделать с помощью расширения
http://myooo.ru/content/view/155/99/
Название: Re: Как в макросе определить строку элемента управления
Отправлено: Abell от 6 мая 2014, 09:18
Огромное всем спасибо! Думаю, теперь у меня есть вся необходимая информация и инструменты, так что буду осваивать этот офисный пакет на должном уровне :)
Название: Re: Как в макросе определить строку элемента управления
Отправлено: JohnSUN от 6 мая 2014, 10:47
Ну, вообще-то, все необходимые инструменты для решения этой конкретной задачи были под рукой с самого начала. И макрос для её решения был не обязателен.
Название: Re: Как в макросе определить строку элемента управления
Отправлено: Abell от 6 мая 2014, 11:07
JohnSUN, круто  :o Действительно, не стоило мне так усложнять, уперся в эти красивые флажки  :roll: Буду знать, спасибо :)