Страницы: 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 - 02.07.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 тому виной.
Изменено: БМВ - 02.07.2019 17:48:13
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: Не Win10 тому виной
Михаил, спасибо, что проверили! Конечно, обновленная FM20.DLL виновата. Насколько помню, эта библиотека существенно менялась в конце 2016г. В ней названия элементов  (всплывающие подсказки) на VBE-Toolbox для форм русской локализации стали на английском языке, а некоторые элементы там частично с синим цветом.
Изменено: ZVI - 02.07.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 - 03.07.2019 09:17:02
Владимир
 
sokol92,  Что то мне подсказывает, что библиотека больше зависит от версии офиса
2010 - 14.0.6009.1000 от 20.10.2010
Изменено: БМВ - 02.07.2019 12:31:45
По вопросам из тем форума, личку не читаю.
 
Возможно. Система обновлялась автоматически вместе с приложениями.
Владимир
 
sokol92, Владимир, так по номеру видна связь с версией Office
2016-16
2013-15
2010-14
2007-12
Изменено: БМВ - 02.07.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.09.2019 00:06:47
Страницы: 1
Наверх