在Excel VBA中,如何设置单元格验证以使其适用于所有区域设置?
Dim mySheet As Worksheet
Set mySheet = ThisWorkbook.Worksheets("Sheet 1")
Dim myRange As Range
Dim validValues as String
validValues = "a;b;c"
Set myRange = mySheet.Cells(2, 2)
myRange.Validation.Add _
Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Formula1:=validValues
validValues = "a,b,c"
基本上我需要的是这个,但我不知道如何确定适用于所有语言环境的'id'。
' Internationalized delimiter
Dim id as String
id = ???
validValues = "a" & id & "b" & id & "c"
似乎有一个我不理解的Excel的“分号模式”,我无法可靠地再现。我有一个特定的Excel实例进入这种模式,所有在其中运行的代码都使用分号而不是逗号。我在这个实例中编写了一个项目并且它工作正常,如果不是我现在必须重写的所有代码,我会认为我犯了一个错误......
为了解决这个问题,任何提示都会受到赞赏。
重新启动Excel后,它将模式更改为逗号,我已经使用了一段时间但是现在这个问题再次袭击了我,Excel开始使用';' (分号)而不是','(逗号)作为我的数据验证的分隔符。
这次我拍了一张截图。数据验证设置为List。
来源设置为:
zero,one,both
这是结果,因为您可以看到Excel不关心我的逗号并显示在同一行:
使用这样的源设置它可以工作:
zero;one;both
结果:
对我来说,为什么Excel这样做是个谜,但我真的需要找到一种方法来确保我的客户永远不会发生这种情况。 任何帮助表示赞赏!
答案 0 :(得分:1)
我刚刚解决了类似的问题。我找不到为什么会发生这种情况的原因,所以我没有一个好的解决方案。然而,我找到了解决问题的方法,可以使用。
您唯一需要的是在添加验证之前为验证范围分配有效值。
运行代码后,如果.Formula1
参数使用分号,则根本没有问题。如果没有,则范围的.Validation.Value
属性返回False
,您可以将其用作重新运行代码的触发器,用逗号分隔的分隔替换分号分隔的列表。然后重新运行验证。
例如:
myRange.value = "a" 'Assuming "a" is a valid value contained in the validvalues string
If myRange.Validation.Value = False Then
validvalues = replace(validvalues,";",",")
myRange.validation.modify Formula1:= validvalues
End if
如果您不希望显示默认值,则可以清除范围值。
答案 1 :(得分:0)
我相信您正在寻找可以在多种情况下工作的分隔符(如果这不是您的查询,请告诉我)。 逗号,分号,有时是很好的分隔符,但通常它们会构成严重的语法和其他一些与字符串相关的错误。
三问号???在这种情况下也不是一个好的选择。
在这些情况下,我更喜欢使用|
(管道)。
很抱歉答案很长:)
答案 2 :(得分:0)