Обратное действие при повторном нажатии на макрос

Автор Duelsel, 5 апреля 2019, 10:28

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

Duelsel

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

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

bigor

#1
Как вариант:

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)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Duelsel

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

bigor

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Duelsel

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

Duelsel

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

bigor

Цитата: Duelsel от  9 апреля 2019, 09:08Слушайте, а как границы таблицы в таком случает окрасить?
вот первый результат по поиску "граница"

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

Rafik

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