Досадная ошибка или что-то ещё?!

Автор eeigor, 20 марта 2021, 11:53

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

eeigor

Тестируем инструкцию 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, "")


Это баг?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#1
Скорее, странности в документации. Инструкция 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.
Владимир.

eeigor

#2
Цитата: sokol92 от 20 марта 2021, 13:43Скорее, странности в документации.
Не совсем, конечно...
Ваш вариант работает вне зависимости от опции VBASupport.
Mid(sFlags, nPos, 1) = ""

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

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

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

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