Создание простой формулы с десятичной дробью и умножением на другую ячейку (по VBA) - PullRequest
0 голосов
/ 04 марта 2020

У меня проблема, как в теме.
Как создать формулу в A1 например, = 3.14 * A2

этот код не работает и возвращает ошибку в окончательной версии. MyVal будет доставлен другими функция

Public Sub DecimalInFormulaTest()
   Dim myVal As Double
   myVal = 3.14
   ActiveSheet.Cells(1, 1).FormulaR1C1 = "=" & myVal & "*R1C2"
End Sub

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Это потому, что CStr преобразует значение с учетом заданной c локали. В некоторых локалях десятичной точкой является запятая ,, которая в конечном итоге вызывает ошибку при попытке записать ее в формулу.

Это может быть неожиданным, поскольку при написании в таких формулах локали вы должны написать они также запятые, но в VBA это не так. Когда вы пишете формулу с кодом, они должны быть "engli sh -specifi c", то есть с функциями engli sh и точкой в ​​качестве десятичного разделителя.

Итак, Str(num) вернет 3.14 если num=3.14, а не 3,14, который решает вашу проблему.

Довольно длинное решение, но лучше представляет решаемую проблему:

Replace(CStr(3.14), ",", ".")
0 голосов
/ 04 марта 2020

Я нашел решение, но оно немного странное. Я пытался использовать CStr (), но он не работал, только Str () работает ОК

Public Sub DecimalInFormulaTest()
   Dim myVal As Double
   myVal = 3.14
   ActiveSheet.Cells(1, 1).FormulaR1C1 = "=" & Str(myVal) & "*R1C2"
End Sub

Еще одна вещь. Я нахожусь в регионе, где десятичный разделитель запятая, а не точка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...