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

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

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

OOKapitan

      Здравствуйте.
      Пишу макрос, и в нём конструкцию вида:
If VAL(LEFT(oSheet.getCellByPosition (5, r).String, SEARCH(" ",oSheet.getCellByPosition (5, r).String)-1))*1>6 Then
Ругается, что подрограмма неопределена. Если вместо куска с Search написать количество выводимых символов цифрой, например, 2, то всё работает на ура. Скажите, пожалуйста, как правильно записать кусок с Search?

bigor

#1
нет функции Search в Star Basic, поэтому и ругается

ps есть InStr()

ЦитироватьInStr(str, str)
InStr(start, str, str)
InStr(start, str, str, mode)

Пытается найти строку 2 в строке 1. Возвращает 0 если не найдено и
начальную позицию если найдено. Необязательный аргумент start указывает
откуда начинать просмотр. Значение по умолчанию для режима 1
(регистронезависимое сравнение). Установка режима в 0 выполняет
регистрозависимое сравнение.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 28 марта 2019, 18:17ps есть InStr()
Нет, не понимаю, как мне пробел найти. Какое из str в функции за то отвечает? Какое именно str отвечает за строку 2, а какое - за строку 1? Разъясните, пожалуйста.

OOKapitan


rami

Цитата: OOKapitan от 29 марта 2019, 10:14Нет, не понимаю, как мне пробел найти. Какое из str в функции за то отвечает? Какое именно str отвечает за строку 2, а какое - за строку 1? Разъясните, пожалуйста.
Неужели трудно сделать маленький эксперимент и посмотреть что к чему:
Sub Main
Print InStr("вася пупкин"," ")    'ищет пробел в строке "вася пупкин", находит 5, значит пробел на пятом месте
'Print InStr(" ","вася пупкин")   'ищет строку "вася пупкин" в пробеле, находит 0, значит, нет васи пупкина в пробеле
End Sub

bigor

Цитата: OOKapitan от 29 марта 2019, 10:37И что означает mode?
выше написано:
Значение по умолчанию для режима 1
(регистронезависимое сравнение). Установка режима в 0 выполняет
регистрозависимое сравнение.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Короче, прописал так:
VAL(LEFT(oSheet.getCellByPosition (5, r).String, InStr(" ", oSheet.getCellByPosition (5, r).String)-1))*1
Пишет: "Неправильный вызов процедуры". А как правильно-то?

OOKapitan

Цитата: rami от 29 марта 2019, 10:37'ищет пробел в строке "вася пупкин", находит 5, значит пробел на пятом месте
Мне надо в ячейке искать - как правильно в таком случае записать?

bigor

Цитата: OOKapitan от 29 марта 2019, 10:41Пишет: "Неправильный вызов процедуры". А как правильно-то?
ты читаешь, что тебе пишут? или рандомно код генеришь :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

#9
Цитата: Bigor от 29 марта 2019, 10:43ты читаешь, что тебе пишут? или рандомно код генеришь
Что я неправильно прочитал?
Понял. Я писал код до получения ответа. Сейчас попробую.

mikekaganski

Цитата: OOKapitan от 29 марта 2019, 10:44
Цитата: Bigor от 29 марта 2019, 10:43ты читаешь, что тебе пишут? или рандомно код генеришь
Что я неправильно прочитал?
Цитата: rami от 29 марта 2019, 10:37
Цитата: OOKapitan от 29 марта 2019, 10:14Нет, не понимаю, как мне пробел найти. Какое из str в функции за то отвечает? Какое именно str отвечает за строку 2, а какое - за строку 1? Разъясните, пожалуйста.
Неужели трудно сделать маленький эксперимент и посмотреть что к чему:
Sub Main
Print InStr("вася пупкин"," ")    'ищет пробел в строке "вася пупкин", находит 5, значит пробел на пятом месте
'Print InStr(" ","вася пупкин")   'ищет строку "вася пупкин" в пробеле, находит 0, значит, нет васи пупкина в пробеле
End Sub

С уважением,
Михаил Каганский

OOKapitan


OOKapitan

#12
Поправил:
VAL(LEFT(oSheet.getCellByPosition (5, r).String, InStr(oSheet.getCellByPosition (5, r).String," ")-1))
Всё-равно - "Неправильный вызов процедуры". Что не так-то? Разобрался. Не думал, что InStr(oSheet.getCellByPosition (5, r).String надо тоже брать в кавычках.

bigor

Цитата: OOKapitan от 29 марта 2019, 10:50надо тоже брать в кавычках.
не надо, покажи как у тебя сейчас
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 29 марта 2019, 11:01не надо, покажи как у тебя сейчас
Вот так:
VAL(LEFT(oSheet.getCellByPosition (5, r).String, InStr("oSheet.getCellByPosition (5, r).String"," ")-1))
Работает на ура.