Информирую о том, что в 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 – зависимо, может быть интересным,
но все же это явная ошибка совместимости версий, прошу учесть всем, у кого в коде это критично.
Возможно, конечно, что это какие-то особенности установки 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 – зависимо, может быть интересным,
но все же это явная ошибка совместимости версий, прошу учесть всем, у кого в коде это критично.
Изменено: - 02.07.2019 09:01:11