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

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

23 Май 2019, 12:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Изменить BackColor у ячейки при помощи пользовательской функции  (Прочитано 3377 раз)
0 Пользователей и 1 Гость смотрят эту тему.
denoleg
Новичок
*
Offline Offline

Сообщений: 2


« Стартовое сообщение: 9 Март 2014, 07:23 »

Здравствуйте! Уже сколько бьюсь и ничего.
Мне нужно изменить фон ячейки при помощи пользовательской функции.
Функцию вызываю так =BackColor(CELL("address";A1);B1;C1;D1)
Вот сама функция
Код:
Function BackColor(a As String, R,G,B)

Doc=ThisComponent
a=join(split(a,"$"),"")
i=split(a,".")
n=ubound(i)

If n=1 then
oSheet=Doc.Sheets.getByName(i(0))
else
oSheet = Doc.CurrentController.ActiveSheet
endif
    oCell = oSheet.getCellRangeByName(i(n))
    oCell.CellBackColor = RGB (R, G, B)
End Function
И ячейка А1 не меняет фон. В чем может быть ошибка?
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 397


WWW
« Ответ #1: 9 Март 2014, 20:32 »

getCellRangeByName  ?
Записан

Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #2: 10 Март 2014, 11:04 »

Не работает из пользовательской функции и не будет работать.
Будет работать из макроса.
Записан
denoleg
Новичок
*
Offline Offline

Сообщений: 2


« Ответ #3: 10 Март 2014, 13:28 »

Не работает из пользовательской функции и не будет работать.
Будет работать из макроса.
Ясно. Буду пробовать. И очень жаль что не будет работать. Может добавят такую возможность.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #4: 10 Март 2014, 15:28 »

Нет, такую возможность добавлять в Calc никто не станет. Дело в том, что твоя задумка идёт в разрез с идеологией электронных таблиц.
Главный принцип вычислений: результат помещается в ту ячейку, в которой написана формула.
А если просмотреть код твоей функции, то получается, что вычисление проводится в той ячейке, где записывается вызов функции, а результат (закраска) должен применяться к какой-то "посторонней" ячейке.
Hasim прав - с помощью пользовательской функции на текущем листе никаких изменений сделать не удастся. На время пересчета формул на листе этот лист блокируется от изменений. То есть, можно было бы раскрасить ячейки на соседнем листе или вписать в них какие-то значения, но на текущем листе добиться этого невозможно. Это ограничение введено специально, чтобы обеспечить работоспособность программы на случай возникновения циклических ссылок.
Если этот тезис понятен (нельзя приказать "покрасить вон там", но можно сказать "покрась меня, вот эту вот ячейку"), то можно перейти к реализации. Для раскрашивания ячеек существуют встроенные средства - условное форматирование и функция STYLE() - поэтому писать собственную функцию нет необходимости. Подробности в Справке
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!