2016-03-01 15 views
5

から式を挿入するとき、私は私が異なる言語の問題VBA

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

のようなコマンドを使用している場合、それはロシアエクセル、たとえば、上で実行されている場合、私のマクロは#NAME?エラーがセルに表示される原因となりますことを、正しく理解してください。 私はСТРОКАがSUM関数のロシアの類似体であり、この場合、上記式は

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

ようにハードコーディングされなければならないことを意味します。実行時に数式を翻訳するのに十分なほどスマートになるとは思わないでしょう。 これを回避する方法はありますか、最も重要なのは、languangeに関係なくマクロを正しく動作させる最も一般的なコードは何ですか?

答えて

10

VBAはEN-US中心です。 VBAの.Formula.FormulaR1C1ROW 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を使用すると、私のコードは絶対に実行可能で、ランゲージシステムに依存しないことを正しく理解できますか? –

+0

それでは、どうしてこのメ​​ソッドが必要なのですか?何か?))なぜ、FormulaLocalのfuncionalityをメソッド.Formulaに統合しないのですか?))Strange enough –

+0

はい、そうです。必要なのは、[.FormulaLocal](https://msdn.microsoft.com/en-us/library/office/ff838851.aspx)または[.FormulaR1C1Local](https: /msdn.microsoft.com/en-us/library/office/ff838568.aspx)を参照してください。あなたのサンプルの 'R12'リファレンスは少し曖昧でした。私は正しく推測してほしい。また、式内の引用符は、引用符付きの文字列内にあるため、2倍にする必要があります。例えば'=" abc "'は '.FormulaLocal =" = "" abc "" "'になります。 – Jeeped