2017-02-22 32 views
3

我已将问题简化为以下代码示例。我正在使用德语Excel版本,其中正常Excel公式中的分隔符是分号“;”而不是“,”(例如=SUMME(A1;A3)而不是=SUM(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似乎将Range()中使用的分隔符切换为分号,直到我重新启动Excel。在运行时错误后重新运行代码时,会发生这种情况。

这是一个普通的Excel错误吗?有人知道这种行为背后是什么? Range班有没有Excel的“本地选项”?

编辑:我只是试图转换a(i)CStr(a(i)但这也行不通。所以没有ByRef类型的问题...

+0

看起来这之前已经注意到LCID(美国):(http://stackoverflow.com/questions/29832281/vba-range-function -suddenly-accep-only-localized-arguments-pt-br) – CLR

+0

我的Excel用户界面也使用分号。但是你的代码对我来说完美无瑕。当出现错误时,单击“调试”按钮并使用立即窗口查询相关变量 – user3598756

+0

德国版Excel使用';'而不是''作为列表中的分隔符,因为','已在德国作为小数点分隔符因为“一半”写成“0,5”而不是“0.5”。我提到这一点是因为你说*有时*这种情况正在发生。所以,每当发生这种情况时,我想要求您检查Application.DecimalSeparator。如果','工作,'Application.DecimalSeparator'应该是'.'。但是,如果它不再工作,而是需要';'我假设'DecimalSeparator'也变为','。 – Ralph

回答

0

如果你想控制它,首先检查分隔符当前正在使用。我的猜测是,你想知道列表分隔:

Application.International(xlListSeparator) 

检查其他分隔符的位置: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-international-property-excel

其他时间我有一个问题,识别VBA小数点分隔符。 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)

最好的解决方案是检查/更改区域设置,甚至是临时的。

Application.LanguageSettings.LanguageID(msoLanguageIDUI)

使这将是1033英语

相关问题