2017-02-22 3 views
3

次のコード例に問題が縮小されました。私はドイツのExcel版を使用しています。通常のExcel式の区切り記号はセミコロン ";" "、"の代わりに使用してください(例:=SUM(A1,A3)の代わりに=SUMME(A1;A3))。
時から異なる動作します今すぐコード:範囲では、カンマの代わりにセミコロンだけが使用されることがあります

Sub CommasDoNotWorkAnymore() 

Dim a() 
Dim i% 

a = Array("A1,A3,A5", "B1", "B2") 
i = 0 

Debug.Print Sheets(1).Range(a(i)).Address 
End Sub 

通常、Excelを起動するときに、このコードは動作します。しかしExcelはExcelを再起動するまで、Range()で使用されている区切り記号をセミコロンに切り替えることがあります。これは、ランタイムエラーの後でコードを再実行するときに発生します。

これは一般的なExcelバグですか?誰もこの行動の背後にあるものを知っていますか? Rangeクラスには、Excel全体の「ローカルオプション」がありますか?

編集:a(i)CStr(a(i)に変換しようとしましたが、これも機能しません。だからByRefの種類の問題...

+0

を前に注目されている。このように見えるの英語のために1033年になりLCID(米国)を与えます-suddenly-accepts-only-localized-arguments-pt-br) – CLR

+0

My Excel UIはセミコロンも使用します。あなたのコードは完璧に私のために動作します。デバッグボタンをクリックしてイミディエイトウィンドウを使用して関連する変数を問い合わせる – user3598756

+0

ドイツ語版のExcelでは、ドイツ語ですでに '、'が小数点の区切り文字として扱われているため、リストの区切り文字として ';' 「1/2」は「0.5」の代わりに「0,5」と書かれているからである。あなたが*時には*これが起こっていると言っているので、私はこれを言及しています。ですから、これが起こるたびに 'Application.DecimalSeparator'をチェックするようにお願いしたいと思います。 '、'が動作する場合、 'Application.DecimalSeparator'は' .'でなければなりません。しかし、それ以上動作しなくて、代わりに ';'が必要な場合、 'DecimalSeparator'も'、 'に変更されたと仮定しています。 – Ralph

答えて

0

あなたがそれを制御したい場合は、最初にどのセパレータが現在使用されているかを確認してください。私が推測すると、リストの区切りを知りたいということです。 https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-international-property-excel

私はVBAで小数点区切りを特定して問題を抱えていた他の時間:ここでは他の区切り

Application.International(xlListSeparator) 

チェック。 Finnally私はこのようにそれを得ることができました:

Function GetVBAdecimalSep() 
    Dim a(0) As Variant 
    a(0) = 1/2 
    GetVBAdecimalSep = Mid(a(0), 2, 1) 
End Function 

セパレータを変更することは必ずしも機能しません。これを参照してください:Changing decimal separator in VBA (not only in Excel)

最高の解決策は、ロケールを確認したり、一時的に変更したりすることです。 (http://stackoverflow.com/questions/29832281/vba-range-function:

Application.LanguageSettings.LanguageID(msoLanguageIDUI)

関連する問題