Проблема с разными языками при вставке формулы из VBA
Правильно ли я понимаю, что если я использую команду, как
Set myRange.formula = “=ROW(mySheet!R12)”
мой макрос вызовет #NAME?
ошибка появляется в ячейках, если она запущена, скажем, на русском Excel. Я имею в виду, что в этом случае приведенная выше формула должна быть жестко
Set myRange.formula = “=СТРОКА(mySheet!R12)”
где СТРОКА - российский аналог функции СУМ. Я бы не ожидал, что Excel будет достаточно умен, чтобы переводить формулы во время выполнения. Так есть ли способ обойти это и, самое главное, какой код является наиболее универсальным для правильной работы макроса независимо от языка?
1 ответ
VBA очень ориентирован на EN-US. .Formula и .FormulaR1C1 в VBA ожидают функцию ROW. Чтобы использовать функцию регионального языка ' flavors ', такую как СТРОКА, вместо этого следует использовать свойство Range.FormulaLocal или Range.FormulaR1C1Local.
То же самое относится и к символам разделителя списка. Используйте запятую (например, ,
) для разделения аргументов в функции при использовании.Formula или.FormulaR1C1 независимо от региональных настроек системы. Если ваша система использует точку с запятой (например, ;
) в качестве символа разделителя списка, его следует использовать только с.FormulaLocal или.FormulaR1C1Local.
Результат на листе будет правильно отражать языковые настройки установки Office.
myRange.Formula = "=ROW(mySheet!$12:$12)"
myRange.FormulaR1C1 = "=ROW(mySheet!R12)"
myRange.FormulaLocal = "=СТРОКА(mySheet!$12:$12)"
myRange.FormulaR1C1Local= "=СТРОКА(mySheet!R12)"