Range有时只接受分号而不是逗号

时间:2017-02-22 10:06:59

标签: vba excel-vba excel

我已将问题减少到以下代码示例。我使用的是德语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那样的问题...

1 个答案:

答案 0 :(得分:0)

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

Application.International(xlListSeparator)

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

另一次我在VBA中识别小数分隔符时遇到问题。最终我能够以这种方式得到它:

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)

给出LCID,英语(美国)为1033