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