непонятка с несоответствием типа данных

Автор Sirius34, 29 августа 2024, 12:26

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

Sirius34

Всем доброго времени суток!

Такой момент странный...
При работе с макросом случайно указал неправильный адрес, и вместо ячейки с числовыми данными сослался на ячейку с текстом.
При отладке заметил странность, потому что считался ноль вместо текста.
Стал разбираться и увидел ошибку с адресом. Исправил, всё работает.
Но непонятка осталась, так как по идее должно было выпасть сообщение о несоответствии типа данных, поскольку переменные были объявлены с указанием типа.
Специально слепил по быстрому тестовый файл с коротким макросом и проверил в Excel'е 2016 и LO 24.0.8.3.
В экселе при считывании ячейки с текстом в числовую переменную появляется сообщение об ошибке, в LO сообщения нет.

Так задумано, или это баг?

mikekaganski

#1
Если в *экселевском* макросе работает не как в экселе, это всегда баг. Режим поддержки VBA задуман чтобы работать "как в Excel (Word, ...)". Другое дело - если речь о различиях в стандартном режиме...

Ошибка должна появляться уже так:

Option VBASupport 1
sub test
  dim x as Long
  x = "abc"
end sub

https://bugs.documentfoundation.org/show_bug.cgi?id=162681
С уважением,
Михаил Каганский

Sirius34

Ради любопытства в пустом ods-файле создал такой же модуль, но без использования VBASupport.
Нет ошибки. Считывается 0...

sokol92

Сейчас при вызове функций преобразования типа CByte, CInt, CLng (и при соответствующих неявных преобразованиях) возвращается 0, если аргумент функции является строкой, которая не может быть преобразована в число в соответствии с настройками локали.
Владимир.

mikekaganski

В пустом ODS без VBASupport это нормальное поведение, и не будет меняться. Наш Бейсик работает так. Ошибка только в том, что в режиме VBA мы должны работать как VBA.
С уважением,
Михаил Каганский

Sirius34

mikekaganski
sokol92
понял, спасибо за разъяснения