Консультация № 191330
06.09.2017, 11:30
0.00 руб.
0 15 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

В LibreOffice Calc Версия: 5.3.3.2 Добавлен макрос:
REM ***** BASIC *****
Sub Main
End Sub
Function BackColor(a)
oSheet = ThisComponent.CurrentController.ActiveSheet
oCell = oSheet.getCellRangeByName(a)
BackColor = oCell.CellBackColor
End Function
Для фильтра столбца по цвету и в нужной ячейке вписана формула:
=BACKCOLOR("A" & ROW())
Где А - столбец с ячейкой с соответствующим цветом.
При открытии документа возникает ошибка:
Ошибка времени выполнения BASIC.
Свойство или метод не найдены: CurrentController.
Если проверять макрос через отладчик то ругается на строку:
oCell = oSheet.getCellRangeByName(a)
Выдает ошибку:
Ошибка времени выполнения BASIC.
Аргумент является обязательным.
Как поправить макрос?

Обсуждение

давно
Профессионал
848
1596
07.09.2017, 11:55
общий
Адресаты:
Вы чем файл открываете через Excel или в OpenOffice ?
давно
Посетитель
401305
6
07.09.2017, 16:33
общий
07.09.2017, 16:34
Открываю в LibreOffice Calc...
давно
Мастер-Эксперт
259041
7459
10.09.2017, 04:12
общий
10.09.2017, 13:52
Адресаты:
Хочется помочь Вам, но я никогда не писал в VBA. Несколько лет я успешно пишу на похожем языке VBS полезные программки (бэкап обновлённых версих всех моих докумов, оптимизация свеже-установленных ОС, чистка сохранённых web-страниц от реклам/мусора…). Но упомянутые Вами конструкции CurrentController , getCellRangeByName() и CellBackColor мне никогда не попадались.

Я уже 3 дня изучаю VBA по серии уроков http://moonexcel.com.ua/уроки-vba5-свойства-properties_ru , но пока не дошёл до нужных.

На портале rfpro.ru/ есть грамотные эксперты, но они заняты (в отличие от меня-пенсионера), а Вы не постарались подробно описать свою задачу, чтоб облегчить ответ и поиск возможных вариантов без редких конструкций. Я в подобных случаях подключаю VBS к Excel-докуму, читаю данные, и делаю обработку VBS-инструментами.

Напишите: Какая Ваша конечная цель? Найти в Excel-книге ячейку с подкрашенным фоном и отобразить её адрес?
Вы писали: "Выдает ошибку: …Аргумент является обязательным" - но Вы не сообщили, Кто именно вызывает Вашу функцию без указани аргумента? Экспертам не видно Вашего экрана. А Ваша Function BackColor(a) описана вне скобок пустой (фиктивной?) процедуры Sub Main … End Sub - не видно связи.

В общем, Если Вы постараетесь, то и для Вас постараются.
давно
Мастер-Эксперт
259041
7459
11.09.2017, 02:26
общий
Адресаты:
До закрытия Вашего Вопроса осталось 9 часов. Поэтому, если Вы ещё нуждаетесь в помощи, просите модераторов продлить срок действия Консультации. А также опубликуйте сюда архив с копией проблемного документа. Можно удалить из копии секретные фрагменты. Но убедитесь перед отправкой, что в оставшейся части копии остались симптомы ошибки.
давно
Старший Модератор
31795
6196
11.09.2017, 11:28
общий
Адресаты:
продлил на 5-ть суток
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
401305
6
11.09.2017, 11:38
общий
11.09.2017, 11:40
Добрый день, всем участникам. Спасибо, что откликнулись.
Спасибо Модераторам за продление.
На сколько я поняла VBA в Exсel отличается от VBA в openoffice/LibreOffice.
Цель была, отфильтровать столбец по цвету ячейки, для этого был создан дополнительный столбец, в котором отображается номер цвета, по которому можно уже нормально фильтровать. Во вложении коротенькая таблица с примером. Возможно кому-то пригодится...
Странно, но сегодня начальная ошибка уже исчезла... Потестирую еще, отпишусь...
Прикрепленные файлы:
83b06ca116e09a1fb7896b350a1002d3.ods
давно
Мастер-Эксперт
259041
7459
11.09.2017, 15:50
общий
Адресаты:
Я скачал Ваш 191330.ods . Но к сожалению мой бесплатный MsExcel из пакета MsOffice2007Standard (распространялся для сотрудников Microsoft) не может открывать .ods-файлы (ни Открыть, ни Импортировать). Устанавливать Office2010 мне что-то не хочется, тк он затрёт мой стабильный и надёжный Office2007, а потом будет вымогать активацию при каждом открытии Word или Excel-докума.
Можно вроде бы конвертировать ods-to-xls в интернете, но у Вас ведь другая задача, верно?

"На сколько я поняла VBA в Exсel отличается от VBA в openoffice/LibreOffice" - VBA - это язык от Microsoft, предоставляющий инструмены для программной обработки документов Microsoft Office (см https://ru.wikipedia.org/wiki/Visual_Basic_for_Applications ).
Насколько успешно может VBS или VBA работать с openoffice/LibreOffice ? - тут надо понимать логику работы. Программист пишет текстовый код и запускает скрипт. VBScript подключается к LibreOffice или MsOffice и просит имполнить команду (зачитать ячейку). Office может не разрешить (например, установлен уровень безопасности "Отключить все макросы"), может разрешить, а может толковать команду, как ошибку (например, редкая команда работает в MsOffice , но не существует в арсенале LibreOffice ).
давно
Мастер-Эксперт
259041
7459
12.09.2017, 02:25
общий
Адресаты:
К утру на свежую голову у меня созрели предложения:
1)Поскольку файл-тип xls признан стандартным, и Ваш LibreOffice вынужден уметь работать с xls, то простейший способ нашего компромисса - сохранить Ваш докум у Вас в стандартном формате xls , а затем импортировать копию на эту страницу (если проблема еще будет актуальна).

2)Если Ваша задача не одноразовая, а Вы профессионально занимаетесь программированием, то Вам очень полезно будет установить Office от Microsoft (дома или на территории, не контролируемой надзорщиками). Тогда Вы сможете быстро локализовать проблему : то ли ошибка в коде (если глючит даже в MsExcel), то ли это недоделка бесплатного аналога LibreOffice .

3)Вам надо выяснить вызывателя вашей глючной функции, которая по моему скромному мнению должна запускаться по Вашей команде ИскатьЯчею, а не автомати при открытии документа. Ручной запуск позволит легко отследить некорректную связь, кот-я беспокоит Вас случайным образом.

Я, в свою очередь, иду Вам навстречу. Дошёл до VBA-циклов. К вечеру освою функции.
давно
Мастер-Эксперт
425
4118
12.09.2017, 08:06
общий
Адресаты:
Судя по тому, что пишется в тексте ошибки, Вы позабыли передать параметр в функцию, либо параметр неправильный.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
425
4118
12.09.2017, 08:12
общий
12.09.2017, 08:13
Адресаты:
Что касается работы со встроенными компонентами, то VBA и LibreOfficeBasic работают по разному, т.к. разные компоненты.
Чтобы проверить работу, Вам необходимо установить себе LibreOffice и никак иначе.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Посетитель
401305
6
12.09.2017, 10:30
общий
Адресаты:
В стандартном MsExcel фильтров больше, в нем можно сделать фильтр по цвету ячеек не используя макросы. Я пытаюсь облегчить работу тем у кого установлен только LibreOffice в нем, по сравнею с MsExcel, многие фильтры отсутвуют, в том числе и фильтр ячеек по цвету. Поэтому был создан данный макрос.
При одной задаче VBA код MsExcel может отличаться от VBA кода в LibreOffice, т.к. в последнем может также отсутвовать часть фунций, и если весь код занимает, к примеру, 4 строчки в MsExcel, то тот же код но для LibreOffice может занимать уже 10 строк...
давно
Посетитель
401305
6
12.09.2017, 10:31
общий
12.09.2017, 10:38
Данный макрос уже был оптимизирован для работы в LibreOffice, т.к. ошибка уже исчезла, возможно проблемы были в настройках безопасности макросов в LibreOffice, это последнее, что я переделывала, установив запуск по запросу, а был максимальный. Есть подозрение, что CurrentController поэтому сразу и не захотел запускаться...


P.S. Возможно он после переделок, подумав ночью, с утра решил нормально заработать и больше не глючить...
давно
Мастер-Эксперт
259041
7459
13.09.2017, 15:38
общий
Адресаты:
Вы писали: "Я пытаюсь облегчить работу тем у кого установлен только LibreOffice" - значит, Вы больше меня достойны быть экспертом в этом разделе! У Вас больше знаний в VBA и LibreOffice. Записывайтесь в эксперты, и будем обмениваться опытом!
давно
Посетитель
401305
6
15.09.2017, 14:43
общий
Адресаты:
Спасибо за приглашение, но я сама только начала изучать VBA... Врядли потяну такое звание...
давно
Мастер-Эксперт
259041
7459
16.09.2017, 02:48
общий
Адресаты:
А тут ничего и тянуть не надо. Вы тянете изучение на работе, и, возможно, в одиночку (не у кого спросить). А на rfpro.ru "товарищи по партии" поделятся с вами опытом. Вместе изучать легче, потому что в Microsoft-справке бывают ошибки ("Excel2007-Справка: "Запуск макроса в книге Excel… нажать сочетание клавиш Ctrl+F8" - не работает, оказывается надо Alt+F8). А в рус-интернет-поиске больше реклам, чем пользы. Знаешь - ответил, не знаешь - промолчал. Подумайте...
Форма ответа