Как макросом вычленить из ячейки 3 символа слева?

Автор OOKapitan, 28 марта 2019, 14:02

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

OOKapitan

      Здравствуйте, уважаемые форумчане.
      Что-то давно меня не было на форуме, поскольку сам справлялся с формулами и макросами в Open Office. Но сейчас снова возник вопрос, решить который без Вашей помощи у меня пока не получается.
      Скажите, пожалуйста, как макросом вычленить из ячейки B2 3 символа слева? То есть как сделать макросом тоже самое, что делает формула ЛЕВСИМВ(B2;3)?

JohnSUN

Привет! Действительно, давно не заглядывал...
Ты,наверное, ищешь функцию Left()?
Function Left3(sOldString As String, Optional countChars As Variant ) As String
If IsMissing(countChars) Then countChars = 3
Left3 = Left(sOldString , countChars)
End Function
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

OOKapitan

Цитата: JohnSUN от 28 марта 2019, 14:20Ты,наверное, ищешь функцию Left()?
Мне надо, чтобы не я здавал в функции диапазон, а чтобы макрос сам обрабатывал, то есть типа так:
For I=1 t0 50 (столько столбцов в таблице)
    IF LEFT(Bi;3)=5 Then 1
Next i

Вопрос в том, как заменить LEFT(Bi;3)=5, чтобы макрос это понял? Подскажите, пожалуйста.

JohnSUN

Гм... что-то твой пример выглядит странно...
Ну, прежде всего "точку с запятой" замени на "просто запятую" - в бэйсике функции пишутся не совсем так, как в самом Calc'е

И кто такой Bi ? Элемент массива, что ли? Тогда, наверное, B(i)?
И зачем вырезать целых три символа, если сравнивать будешь с ЧИСЛОМ 5?
А про "Then 1" я даже не спрашиваю...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

OOKapitan

Мне надо в макросе прописать так:
IF LEFT(B1,1)=5 Then A1 =1
Как это сделать?

JohnSUN

Ну как... Открыть редактор макросов и написать... В чём проблема-то? Твой последний образец выглядит вполне пристойно, должен работать. Хоть и непонятно, кто такие B1 и A1 - это ты не про адреса ячеек пишешь, нет же? И тема называется "3 символа", а ты вырезаешь только один... и сравниваешь его с цифрой 5, а не со строкой "5"
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

bigor

Цитата: OOKapitan от 28 марта 2019, 14:44Как это сделать?
В соседнем посте ты же сам код приводишь как обратиться к ячейке
oSheet.getCellByPosition (i, j) добавь чтение текстового содержимого .getString
соедини его с этим
IF LEFT(B1,1)=5 Then A1 =1
и должно получиться
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: JohnSUN от 28 марта 2019, 15:04Открыть редактор макросов. и написать...
Просто я не думал, что так работает. Но возникла новая проблема:
В ячейке E1 написано: 52 мес. В макросе LEFT(oSheet.getCellByPosition (5, 1).String,1) не равно 5. В формуле можно было бы сделать так: =ЛЕВСИМВ(E1;1)*1, и тогда результат формулы был бы равен 5. А как сделать в макросе? Подскажите, пожалуйста.

JohnSUN

Ну, здесь, наверное, нужно начать с того, что getCellByPosition (5, 1) указывает не совсем на Е1, а немного дальше и ниже, на F2
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

bigor

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

OOKapitan


bigor

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

OOKapitan

#12
Цитата: Bigor от 28 марта 2019, 16:08getbyindex(1).
Это всегда так? Или цифра 1 от чего-то зависит?
И как в VAL засунуть LEFT? С этим разобрался.

bigor

Цитата: OOKapitan от 28 марта 2019, 16:52Это всегда так? Или цифра 1 от чего-то зависит?
это номер листа, 2-ой, т.к. пример привел для вывода ячейки a1 на 2-м листе

Как ты без нас полгода обходился :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 28 марта 2019, 17:02Как ты без нас полгода обходился
В начале когда прописываю:
oDoc=Thiscomponent
oSheet=oDocSheets(i)

И далее остальной код.  :D