Это потому, что CStr
преобразует значение с учетом заданной c локали. В некоторых локалях десятичной точкой является запятая ,
, которая в конечном итоге вызывает ошибку при попытке записать ее в формулу.
Это может быть неожиданным, поскольку при написании в таких формулах локали вы должны написать они также запятые, но в VBA это не так. Когда вы пишете формулу с кодом, они должны быть "engli sh -specifi c", то есть с функциями engli sh и точкой в качестве десятичного разделителя.
Итак, Str(num)
вернет 3.14
если num=3.14
, а не 3,14
, который решает вашу проблему.
Довольно длинное решение, но лучше представляет решаемую проблему:
Replace(CStr(3.14), ",", ".")