我已将问题简化为以下代码示例。我使用的是德语 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 范围内的“本地选项”?
编辑:我只是尝试使用 CStr(a(i)
转换 a(i)
,但这也不起作用。所以不存在 ByRef 类型的问题。 ..
最佳答案
如果你想控制它,首先检查当前使用的分隔符。我猜你想知道列表分隔符:
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
关于vba - 范围有时只接受分号而不是逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42388465/