2016-03-01 2 views
5

я правильно понимаю, что если я использую команду какРазличные языки выдают при вставке формулы из VBA

Set myRange.formula = “=ROW(mySheet!R12)” 

мой макрос вызывает #NAME? ошибки появляются в клетках, если он выполняется, скажем, русский Excel. Я имею в виду, что в этом случае приведенная выше формула должна быть жестко закодирована как

Set myRange.formula = “=СТРОКА(mySheet!R12)” 

где СТРОКА является русским аналогом функции SUM. Я бы не ожидал, что Excel будет достаточно умным, чтобы перевести формулы во время выполнения. Итак, есть ли способ обойти это и, самое главное, какой самый общий код для правильной работы макроса независимо от языка?

ответ

10

VBA очень EN-US-ориентированный. VBA's .Formula и .FormulaR1C1 ожидают ROW function. Чтобы использовать «языковые» функции региональной языковой функции, такие как СТРОКА, вместо этого следует использовать Range.FormulaLocal property или Range.FormulaR1C1Local property.

То же самое относится к символам разделителя списков. Используйте запятую (например, ,) для разделения аргументов в функции при использовании .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)" 
+0

Итак, правильно ли вы правильно поняли, что использование .FormulaLocal сделает мой код абсолютно жизнеспособным и не зависит от системы languange? –

+0

Тогда зачем нам нужен метод?). И почему бы им просто не интегрировать функциональность .FormulaLocal в метод .Formula?)) Странно достаточно –

+0

Да, это должно быть. Все, что вам нужно, это убедиться, что вы используете [.FormulaLocal] (https://msdn.microsoft.com/en-us/library/office/ff838851.aspx) или [.FormulaR1C1Local] (https://msdn.microsoft.com/en-us/library/office/ff838568.aspx) соответственно. Ссылка 'R12' в вашем образце была немного неоднозначной; Надеюсь, я правильно понял. Кроме того, любые цитаты в формуле должны быть удвоены, поскольку они будут находиться в пределах строки с кавычками. например '=" abc "' становится '.FormulaLocal =" = "" abc "" "'. – Jeeped

Смежные вопросы