Как записать макросом поиск пробела в ячейке?

Автор OOKapitan, 28 марта 2019, 17:50

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

bigor

Цитата: OOKapitan от 29 марта 2019, 15:22А если мне нужны цифры между вторым и третьим пробелом в ячейке (см. ячейки в столбце F), - как тогда будет выглядеть запись?
тогда нужно можно использовать mid(), что бы взять строку после первого пробела
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

JohnSUN

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

OOKapitan

Цитата: Bigor от 29 марта 2019, 15:29Возвращает верхнюю границу массива, переданного в качестве аргумента
Читал и не понимаю.
Вот строка: For 1 = 1 to UBound(Array)
Стало быть верхняя граница массива - 1, а нижняя - UBound (Array). Но как нижней может быть верхняя граница массива?

bigor

Почитай теперь про циклы, for в частности
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

mikekaganski

:D термины "нижняя" и "верхняя" применительно к границам массивов (в частности, Basic) никак не связаны с расположением нумерованных строк (где номер растёт сверху вниз) в таблицах.

Нижняя граница массива - это наименьший номер элемента в массиве. В Basic это может быть любой номер; если заранее неизвестно, какой наименьший номер в данном массиве, используется LBound (но часто мы знаем, какой конкретно номер будет нижним, когда получаем массив из определенной функции). А верхняя граница - это наибольший номер.
С уважением,
Михаил Каганский

OOKapitan

Цитата: Bigor от 29 марта 2019, 16:00for в частности
:o А кроме For бывают и другие циклы? Хотя вспомнился Loop, но какие есть ещё?

OOKapitan

Цитата: mikekaganski от 29 марта 2019, 16:06это наименьший номер элемента в массиве
Как тогда он определяется?

mikekaganski

Прикольно. Ощущение, как будто в школе куча учителей пытаются чему-то научить одного "ученика", который не слышал о самообразовании.
С уважением,
Михаил Каганский

bigor

Цитата: OOKapitan от 29 марта 2019, 16:08Как тогда он определяется?
у тебя значения начинаются с 4 строки, значит наименьший номер 3 (т.к. счет идет с 0)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

JohnSUN

Цитата: OOKapitan от 29 марта 2019, 15:57
Читал и не понимаю

Удивительная, заслуживающая уважения настойчивость. Кто-то другой уже давно бросил бы это гиблое дело - ну, не получается, ну и не надо. Может быть, действительно, пусть этим занимаются те, у кого получается, те, кто понимает  ???

"Трудно сделать процесс захватывающим при отсутствии конечного результата" (с) Жванецкий
Это об усилиях форумчан в попытках помочь... Полсотни сообщений, две сотни просмотров темы, КПД сопоставим с величиной "гора родила мышь"

Кстати, если уж тема начинается со слов
Цитата: OOKapitan от 28 марта 2019, 17:50
      Пишу макрос
то с какого перепугу она размещена в Calc?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

OOKapitan

УРРРРРААААА! ВСЕМ ОГРОМНЕЙШЕЕЕ СПАСИБИЩЕЕЕ!
КОД уже почти готов.
Вот он:
Sub UF
Dim i&, r&, a&
oDoc=Thiscomponent
oSheet = oDoc.Sheets(i)
For r=3 to oSheet.getColumns().getByIndex(5).queryEmptyCells().getByIndex(oSheet.getColumns().getByIndex(5).queryEmptyCells().getCount()-1).getRangeAddress().StartRow-1
If oSheet.getCellByPosition(5, r).String="ИСТЁК" or oSheet.getCellByPosition(5, r).String="ОТСУТСТВУЕТ" Then
   oSheet.getCellRangeByPosition(1,r,5, r).SetPropertyValue("CellBackColor", 16711680)
ElseIf VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))>=6 Then
   oSheet.getCellRangeByPosition(1,r,5, r).SetPropertyValue("CellBackColor", 65280)
ElseIf VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))<6 and VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))>=3 Then
   oSheet.getCellRangeByPosition(1,r,5, r).SetPropertyValue("CellBackColor", 16776960)
ElseIf VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))<3 and VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))>=1 Then
   oSheet.getCellRangeByPosition(1,r,5, r).SetPropertyValue("CellBackColor", 15132236)
ElseIf VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))<1 and VAL(LEFT(oSheet.getCellByPosition(5, r).String,20))>=0 Then
   oSheet.getCellRangeByPosition(1,r,5, r).SetPropertyValue("CellBackColor", 16750950)
End If
Next r
End Sub

Из когда уже понятно, почему не подходит Условное Форматирование. Есть и ещё одна причина - хочется видеть изменялся ли при выполнении когда цвет ячейки. Собственно поэтому код ПОЧТИ готов. Про определение макросом кода цвета я задал вопрос тут. Как доделаю полностью код - выложу его здесь.

mikekaganski

Цитата: OOKapitan от 29 марта 2019, 16:43Из когда уже понятно, почему не подходит Условное Форматирование.
И почему же? Потому что используется AOO, который не умеет больше 3 условий по причине отсталости разработки?
С уважением,
Михаил Каганский

OOKapitan

Цитата: mikekaganski от 29 марта 2019, 16:49Потому что используется AOO, который не умеет больше 3 условий по причине отсталости разработки?
Именно так, только не AOO, а OpenOfficeOrg.

bigor

#58
Цитата: OOKapitan от 29 марта 2019, 16:43oSheet = oDoc.Sheets(i)
я бы или i присвоил 0 до этой строчки, или просто написал бы Sheets(0)

цвета удобнее вначали задать константами, а потом уже использовать, через неделю
ты уже забудешь какой из этих 16776960, 15132236 итд зеленый, какой красный

до первого пробела уже сошлись, что left() лишний :) мог бы переписать без него

и все это из-за лени написать служебку на установку либры
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 29 марта 2019, 17:28и все это из-за лени написать служебку на установку либры
Не из-за лени - у нас столько проблем, что до Либры ни у кого не дойдут руки - максимум до Экселя.