2016-03-01 49 views
5

插入公式時做我理解正確的話,如果我使用像不同的語言問題,從VBA

Set myRange.formula = 「=ROW(mySheet!R12)」 

命令我的宏將導致如果它運行,比如說,俄羅斯的Excel #NAME?錯誤顯示在單元格。 我的意思是在這種情況下,上面的公式應當硬編碼等

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

其中СТРОКА是SUM函數的俄羅斯類似物。我不希望Excel能夠在運行時足夠聰明地翻譯公式。 那麼有沒有什麼辦法可以解決這個問題,而最重要的是,什麼是最通用的代碼,使宏無論在哪個語言都能正常工作?

回答

10

VBA非常以美國爲中心。 VBA的.Formula.FormulaR1C1預計ROW function。要使用СТРОКА這樣的區域性語言功能「口味」,應該使用Range.FormulaLocal propertyRange.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的funcionality集成到方法.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