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

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

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

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Обратное действие при повторном нажатии на макрос  (Прочитано 488 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Duelsel
Участник
**
Offline Offline

Сообщений: 5


« Стартовое сообщение: 5 Апрель 2019, 10:28 »

 Непонимающий Непонимающий Непонимающий
Есть макрос, красит диапазон ячеек в черный цвет,
прошу подсказать как сделать чтобы он выполнял обратное действие,
окрашивал текст в белый цвет, ну или откатывал действие,
при повторном клике на кнопку на панели.
То есть цель не сделать отдельный макрос на второе действие,
а привязать все к одному макросу...
Заранее спасибо.

sub OAK

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$G$3:$J$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Color"
args2(0).Value = 0

dispatcher.executeDispatch(document, ".uno:Color", "", 0, args2())

end sub
« Последнее редактирование: 5 Апрель 2019, 10:43 от Duelsel » Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 568


« Ответ #1: 5 Апрель 2019, 11:23 »

Как вариант:

Код:
Sub ColorInv
oSheet=ThisComponent.Sheets(0)
if oSheet.getCellRangeByPosition(6,2,7, 20).GetPropertyValue("CellBackColor")=rgb(0,0,0) then
oSheet.getCellRangeByPosition(6,2,7, 20).SetPropertyValue("CellBackColor",rgb(255,255,255))
else
oSheet.getCellRangeByPosition(6,2,7, 20).SetPropertyValue("CellBackColor",rgb(0,0,0))
end if
End Sub


ps для раскраски шрифта заменить CellBackColor на CharColor
    и с диапазоном промахнулся надо (6,2,9,20)
« Последнее редактирование: 5 Апрель 2019, 11:34 от Bigor » Записан
Duelsel
Участник
**
Offline Offline

Сообщений: 5


« Ответ #2: 8 Апрель 2019, 15:33 »

Ваш вариант работает как надо но он меняет цвет заливки ячейки,
скажите пожалуйста, а как сменить цвет текста в ячейке...?
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 568


« Ответ #3: 8 Апрель 2019, 15:44 »

а как сменить цвет текста в ячейке...?
Почитайте после ps
Записан
Duelsel
Участник
**
Offline Offline

Сообщений: 5


« Ответ #4: 9 Апрель 2019, 09:08 »

Слушайте, а как границы таблицы в таком случает окрасить?
Записан
Duelsel
Участник
**
Offline Offline

Сообщений: 5


« Ответ #5: 9 Апрель 2019, 09:28 »

Да и данный вариант подходит только в случае если диапазон относительно листа не перемещается, так как при перемещении все перестает работать...
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 568


« Ответ #6: 9 Апрель 2019, 09:49 »

Слушайте, а как границы таблицы в таком случает окрасить?
вот первый результат по поиску "граница"

Цитата:
так как при перемещении все перестает работать...
я диапазон сделал из вашего примера первоначального. Предвидеть куда он будет перемещаться не смог Улыбка
координаты диапазона задаются здесь
Код:
oSheet.getCellRangeByPosition(6,2,9, 20)
, так что двигайте куда хотите
Записан
Rafik
Форумчанин
***
Offline Offline

Сообщений: 87


« Ответ #7: 9 Апрель 2019, 19:36 »

Предлагаю сделать так: добавить строку
Код:
oRange = oSheet.getCellRangeByPosition(6,2,9, 20)
сразу после получения oSheet. В макросе, далее, где упоминается фрагмент oSheet.getCellRangeByPosition(6,2,9, 20), заменить его на oRange. Тогда правку диапазона нужно будет делать только на одном участке.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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