Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
О проблеме совместимости библиотеки элементов MSForms в Win10, при системной запятой как разделителе целой и дробной частей числа
 
Информирую о том, что в Windows 10 библиотека FM20.DLL элементов формы MSForms как в 32-х, так и в 64-х битных версий Office работает с преобразованием десятичных чисел в текстовое значение контролов TextBox, ListBox и ComboBox иначе, чем это было ранее.
Возможно, конечно, что это какие-то особенности установки Office, но проявляется не только у меня - неплохо было бы проверить и на других компьютерах с Win10.
У меня в Win10 64 бит проблема есть как в 32 битной версии Excel 2010, так и в 64-битной версии Excel 2016.

Проблема проявляется, когда в качестве разделителя целой и дробной части десятичного числа в операционной системе используется не точка, а запятая, как в русской локализации. Если ранее VBA  код TextBox1 = 1.23 или TextBox1.Value = 1.23 помещал в TextBox1 текстовое значение 1,23 с запятой, то теперь в Win10 помещает текстовое 1.23 с точкой. И получается, что  IsNumeric(TextBox1.Value) = False, а CDbl(TextBox1.Value) приводит к ошибке, чего ранее не было.

Обойти проблему можно использованием TextBox1.Text = 1.23 или TextBox1.Value  = CStr(1.23), тогда в результате будет запятая, а не точка.
Здесь 1.23   - число для примера, понятно, что это число может быть задано неявно, например, как Range("A1").Value и т.п.

Хуже обстоит дело с элементами ListBox и ComboBox, которые так ListBox1.List = Range("A1:A4").Value теперь тоже заполняются с использованием точки вместо запятой в качестве разделителя целой и дробной частей числа. Можно, конечно, применять ListBox1.AddItem CStr(1.34) , но это медленнее.
В других элементах MSForms нет такой проблемы, например, Label2 = 1.23 помещает, как и ранее, текстовое значение 1,23 с запятой.

В принципе, то, что TextBox1.Value теперь независимо от локализации, а TextBox1.Text – зависимо, может быть интересным,
но все же это явная ошибка совместимости версий, прошу учесть всем, у кого в коде это критично.
Изменено: ZVI - 2 Июл 2019 09:01:11
 
ZVI, спасибо за информацию. Сам на 10 не работал плотно, но рано или поздно придётся.
Знания и технологии принадлежат человечеству, и каждый сам решает делиться ими или исчезнуть вместе с ними.
 
Win10 x64, Office 15 x32, FM20.DLL 15.0.4737.1000
Win10 x64, Office 16 x64, FM20.DLL 16.0.4266.1001
Win7 x64  , Office 15 x32, FM20.DLL 15.0.4737.1000
WinXP x32, Office 13 x32, FM20.DLL 14.0.6009.1000
указанный эффект присутствует
Вывод - Не Win10 тому виной.
Изменено: БМВ - 2 Июл 2019 17:48:13
 
Цитата
БМВ написал: Не Win10 тому виной
Михаил, спасибо, что проверили! Конечно, обновленная FM20.DLL виновата. Насколько помню, эта библиотека существенно менялась в конце 2016г. В ней названия элементов  (всплывающие подсказки) на VBE-Toolbox для форм русской локализации стали на английском языке, а некоторые элементы там частично с синим цветом.
Изменено: ZVI - 2 Июл 2019 10:28:47
 
Здравствуйте, коллеги! Выполнил следующий тест на нескольких конфигурациях: Win XP + Excel 2003, Win XP + Excel 2007, Win 7 + Excel 2007, Win 10 + Excel 2016.
На всех системах в региональных настройках разделителем между целой и дробной частью является запятая.
Код
Sub test()
  Load UserForm1
  With UserForm1
     .TextBox1 = 0.5
      Debug.Print .TextBox1
     .TextBox1 = Now
     Debug.Print .TextBox1
  End With
End Sub

На всех конфигурациях формат результата выглядит следующим образом
Код
0.5
7/2/2019 11:40:10 AM

Таким образом, выводы сообщения #1 применимы и к иным конфигурациям (Win XP - самая старая система, которая у нас в компании есть).

По-своему, даже логично  :) , игнорирование региональных надстроек при присвоении свойства value ячейкам мы на форуме обсуждали
Владимир
 
Цитата
ZVI написал:
эта библиотека существенно менялась в конце 2016г
Владимир, не думаю, все библиотеки, что у меня под рукой, датированы июнем, июлем 2015
 
Fm20.dll из Windows XP имеет версию 12.0.4518.1014 от 27.10.2006.

Последний крупный пакет обновлений для Windows XP установлен c датами изменения отдельных файлов *.dll от 25.08.2016, что корреспондирует с периодом из #4.
Изменено: sokol92 - 3 Июл 2019 09:17:02
Владимир
 
sokol92,  Что то мне подсказывает, что библиотека больше зависит от версии офиса
2010 - 14.0.6009.1000 от 20.10.2010
Изменено: БМВ - 2 Июл 2019 12:31:45
 
Возможно. Система обновлялась автоматически вместе с приложениями.
Владимир
 
sokol92, Владимир, так по номеру видна связь с версией Office
2016-16
2013-15
2010-14
2007-12
Изменено: БМВ - 2 Июл 2019 13:11:25
 
Так я же не спорю :)  А число 13 пропущено (резервировано для 2008 1/2)
Владимир
 
Цитата
sokol92 написал:
А число 13 пропущено
Суеверные они.  :D
 
Цитата
sokol92 написал: На всех конфигурациях формат результата выглядит следующим образом... 0.5
Владимир, у меня на старом компьютере с русифицированной Windows XP Proffesional SP3 в Excel 2003, 2007, 2010 - везде при TextBox.Value = 1.23 записывается "1,23" с запятой. То есть, разделитель в TextBox соответствует разделителю операционной системы (запятая).
 
Цитата
БМВ написал: Суеверные они
Михаил, их клиенты тоже суеверные бывают, поэтому 13-ю тогда и пропустили.
 
Цитата
ZVI написал:
записывается "1,23" с запятой.
Посмотрел журнал обновлений Windows XP. Последний пакет установлен этот (после 4-летнего перерыва).
Владимир
 
Кто-нибудь пробовал заменить FM20.dll в Win10x64? Проблема пропадает?
Взять этот файл предполагается из Win8.1x64...
 
Возможное решение проблемы. Сам пока не пробовал - нету Win10 для испытаний.

https://answers.microsoft.com/en-us/msoffice/forum/msoffice_other-mso_win10/office-2016-crashed-when-userform-added-to-vba/f2f16ffa-9a1f-4bfd-babb-1e93a78d5c65?auth=1)&page=3

цитата Paul Kettle:

"Resolution: I copied my current Windword.BOX and Excel.BOX files from my Windows 7 device (known working without issues) to my Windows 10 and that fixed the issue. Note: My Windows 7 and Windows 10 are both running Office 2016."

Сокращённый перевод: скопировать файл Excel.box с "рабочей" станции на "проблемную"

Файл *.BOX находится здесь:
C:\Users\(your computer user)\application data\Microsoft\forms\EXCEL.box

Кто-то файл *.box переименовывает и тогда создаётся новый файл. Но это на ОДИН раз. Переменовывать можно *.bat файлом, кмк...
Изменено: jack_21 - 26 Сен 2019 00:06:47
Страницы: 1
Читают тему (гостей: 1)
Наверх