Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

15 Май 2021, 08:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Досадная ошибка или что-то ещё?!  (Прочитано 441 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 550



« Стартовое сообщение: 20 Март 2021, 11:53 »

Тестируем инструкцию Mid (не функцию).
Синтаксис: Mid(Text$, Start&, Length&, Text$)

Код:
Rem Option VBASupport 1

Sub Test_MidStatement
    Dim nPos&, sFlags$

    sFlags = "ismwx"
    nPos = InStr(sFlags, "i")
    If nPos > 0 Then Mid(sFlags, nPos, 1, "")
    Print sFlags
End Sub
Работает. Но в режиме VBASupport не компилируется. Не ндравится ей закрывающая скобка: Mid(sFlags, nPos, 1, "")
Обойдём, конечно. Но одно короче другого...
Код:
    sFlags = Left(sFlags, nPos - 1) & Mid(sFlags, nPos + 1)
    Mid(sFlags, nPos, 1, "")

Это баг?
« Последнее редактирование: 20 Март 2021, 13:17 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 404


WWW
« Ответ #1: 20 Март 2021, 13:43 »

Скорее, странности в документации. Инструкция Mid в VBA выглядит по-иному.  В LO Basic для Option Compatible (и Option VBASupport 1) работает так:

Код:
Sub TestMod
  Dim s As String
  s="Заец"
  Mid(s, 3, 1)="я"
  Msgbox s
End Sub

С моей точки зрения, нет никакого резона не использовать опцию Compatible (или VBASupport 1 в необходимых случаях). Также, всегда следует использовать Option Explicit.
« Последнее редактирование: 20 Март 2021, 13:50 от sokol92 » Записан

Владимир.
eeigor
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 550



« Ответ #2: 20 Март 2021, 14:00 »

Скорее, странности в документации.
Не совсем, конечно...
Ваш вариант работает вне зависимости от опции VBASupport.
Mid(sFlags, nPos, 1) = ""

Однако упомянутый мной вариант, со ссылкой на документацию, тоже работает, но только если режим VBASupport не задан.
Очевидно, что надо внести изменения в документацию и обеспечить однообразность использования инструкции.
Характерно сообщение об ошибке (на скриншоте): требует ведь операции присваивания...

...нет никакого резона не использовать опцию Compatible или VBASupport 1 в необходимых случаях
Тот самый случай: используются диапазоны VBA ввиду отсутствия возможности в LO Calc передать ссылку в UDF на выбранный диапазон.

UPD:
Mid(sFlags, nPos, 1) = ""

Вообще, поражают ошибки, связанные с аварийным завершением приложения, когда, казалось бы, ничего отличного от предыдущих действий не делаешь: то нормально, то вылет...
Программа работать стала нестабильно: вылетает... Пришлось заменить на прежний вариант (который длиннее). Без уверенности, что в этом дело.


* Снимок экрана от 2021-03-20 13-55-05.png (8.85 Кб, 330x152 - просмотрено 4 раз.)
« Последнее редактирование: 20 Март 2021, 14:25 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!