范围有时只接受分号而不是逗号
问题描述:
我已将问题简化为以下代码示例。我正在使用德语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类型的问题...
答
如果你想控制它,首先检查分隔符当前正在使用。我的猜测是,你想知道列表分隔:
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英语
看起来这之前已经注意到LCID(美国):(http://*.com/questions/29832281/vba-range-function -suddenly-accep-only-localized-arguments-pt-br) – CLR
我的Excel用户界面也使用分号。但是你的代码对我来说完美无瑕。当出现错误时,单击“调试”按钮并使用立即窗口查询相关变量 – user3598756
德国版Excel使用';'而不是''作为列表中的分隔符,因为','已在德国作为小数点分隔符因为“一半”写成“0,5”而不是“0.5”。我提到这一点是因为你说*有时*这种情况正在发生。所以,每当发生这种情况时,我想要求您检查Application.DecimalSeparator。如果','工作,'Application.DecimalSeparator'应该是'.'。但是,如果它不再工作,而是需要';'我假设'DecimalSeparator'也变为','。 – Ralph