Макрос и Номера листов

Автор ink-service, 12 февраля 2019, 16:59

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

bigor

Цитата: ink-service от 14 февраля 2019, 15:40Но в листе УФ получается  работает сразу
ну так правильно, я его до вас запускал вот условное форматирование и осталось. Каждый раз при запуске макроса оно "переустанавливается" :)

Цитата: ink-service от 14 февраля 2019, 15:40мне бы хотелось чтобы это условное форматирование и то что сделано  первым  было в одном макросе)
вешай кнопку на test и будет как ты хочешь
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ink-service

Цитата: Bigor от 14 февраля 2019, 15:50вешай кнопку на test и будет как ты хочешь
Но мне макрос нужно перенести из листа, в общую книгу макросов, чтобы я его прмиенял для любых книг с листами)..
я перенес. открыл другую книгу с листами , нажал на кнопку Тест - заполнилось все данными как  Вы сделали..
потом нажал на запуск макроса UF  и вышла ошибка: "Ошибка времени выполнения Basic. Аргумент является обязательным."

наверное я что-то не так делаю.((..  извиняюсь за тупость)

bigor

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

ink-service

тока добрался проверить!... все точно работает)..  СПАСИБО  большое!!!  ))

ink-service

ДОброго времени всем..  Не стал заново создавать тему т.к. моя просьба как продолжение этой темы..  мне теперь нужно в макросе дописать чтобы  в результате выделить цветом мининимальное значение  в получившихся цифрах..  
Помогите как это сделать?

bigor

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

ink-service

Цитата: Bigor от 16 октября 2019, 16:18Это в столбцах J и L ?
Да.. в этих столбцах мы получаем значения и вот в нужно выделить цветом какое значение минимальное (зеленое) и максимальное (красное),  и так по каждой строчке.

bigor

В uf перед end sub вставить
Dim oCondition1(2) As New com.sun.star.beans.PropertyValue
oRange = ThisComponent.Sheets(List).getCellRangeByName("J11:J100")
oConFormat = oRange.ConditionalFormat
oCondition1(0).Name = "Operator"
oCondition1(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition1(1).Name = "Formula1"
oCondition1(1).Value = "$J1=MIN($J$11:$J$100)"
oCondition1(2).Name = "StyleName"
oCondition1(2).Value = "Good"
oConFormat.addNew(oCondition1())
oRange.ConditionalFormat = oConFormat

это УФ по минимуму в столбце J, для максимума аналогично, только в формуле MIN на МАХ поменять

зы  oCondition1(1).Value = "$J1=MIN($J$11:$J$100)" написано $J1, а после отработки макроса
вижу $J11. Почему непонятно :(
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ink-service

супер..  спасибо...   попробую вечерком дома)... 

ink-service

Проверил..  немного не то, нужно выдрать минимальное (или максимальное) значение в СТРОКЕ собранных данных.   пример прилагаю. там на Листе1 как раз я выделил зеленым как видеть хочется.
Т.к. Листов может быть и 5 и 10 то и соответственно столбцов будет больше и во в них и нужно построчно видеть минимальное (или максимально) значение выделенное, чтобы глаза не ломать))..

bigor

В строке же еще может и количество быть, как его от цены фильтровать? И мне кажется от такого количества формул УФ тормоза начнутся
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ink-service

А можно просто отдельный макрос сделать? т.е. сначала нажал один макрос УФ..  получил результат..   потом  Нажал и увидел минимум или максимум из того результата)
А отфильтровать кол-во отфильтровать если то  можно тогда в макросе сделать именно конкретные столбцы J L N P R  т.е. как раз те которые с ценами будут получатся..   
а если уж мне больше нужно будет я сам могу потом добавить в формуле..

bigor

Для J L N показывает минимум
при желании можно допилить что бы заполненные строки определял ( я сделал просто по 89 на каждом листе)
Для максимума изменить в формуле Min на Max и стиль с Good на Bad

вставить перед end sub в uf
Dim oCondition1(2) As New com.sun.star.beans.PropertyValue
For j=11 To 100


t= ("$J$"& j &":$N$"& j)

oRange = ThisComponent.Sheets(List).getCellRangeByName(t)

oConFormat = oRange.ConditionalFormat
oCondition1(0).Name = "Operator"
oCondition1(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition1(1).Name = "Formula1"
oCondition1(1).Value = "and(A$"& j &"=MIN($J$"& j &";$L$"& j &";$N$"& j &");A$"& j &"<>"""")"
oCondition1(2).Name = "StyleName"
oCondition1(2).Value = "Good"
oConFormat.addNew(oCondition1())
oRange.ConditionalFormat = oConFormat
next
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

ink-service

Круто).   вроде все работает)  спасибо огромное. 
а если нужно еще пару колонок прибавить? мне просто в формуле можно это дописать?

bigor

Цитата: ink-service от 18 октября 2019, 21:44в формуле можно это дописать?
В макросе нужно будет подправить формулу
1. Для t изменить диапазон на нужный
2. Для oCondition1(1).Value дописать по аналогии столбцы

зы я раньше писал, что при запуске макроса УФ  "переустанавливается". Был не прав, каждый запуск добавляет условие в УФ. Поэтому если макрос запускается в одном файле несколько раз, то желательно периодически сбрасывать УФ
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут