фигасе!.. не знал. вывод - вба-шный код воспринимает при pastespecial запятую как разделитель групп разрядов. ессно, нигде про это не написано. американский пофигизм а-ля "мы великая нация".
Ну как же нигде не написано...VBA использует американские разделители внутри кода всегда. Разве у Вас получалось записать число 234,34? Нет. Вы всегда записываете 234.34. Всегда так было.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Как сказать...Любой метод, вызыванный из VBA подчиняется именно VBA, а не программе, к которой этот метод принадлежит. В данный метод при работе с числами передается информация о параметрах/аргументах. Т.к. аргумент в данном случае число - то VBA его так и воспринимает - числом. Таким, какое он в состоянии обработать внутри себя и передать в качестве аргумента. Никогда не задумывались, почему при преобразовании чисел, записанных как текст, через Спец.вставку из Excel это работает, а из VBA нет?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Честно скажу, код не смотрел, ни здесь, ни в "оригинале" темы. Но, раз уж речь зашла о Val, то в спраке написано, что для региональных стандартов нужно использовать CVar. ...а "запятую" Val, вообще-то считает за текст и обрезает. А данный случай частный - когда после запятой ровно три знака.
Не надо "лечения", не надо "Но, раз уж речь зашла о Val". Макрос записан рекордером. Файл поглядите. вот это
Код
For Each Area In Selection.SpecialCells(xlCellTypeConstants).Areas
Area.FormulaLocal = Area.FormulaLocal
Next
а также то, что предложил Михаил в оригинале, я вполне могу воспроизвести, и усовершенствовать НО! Вопрос совсем не в том, как это победить, а в том, почему это происходит?!