用于数据验证的Mystery Excel分号模式,因未知原因停止识别标准逗号

时间:2016-10-17 06:22:49

标签: excel vba excel-vba validation

在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实例进入这种模式,所有在其中运行的代码都使用分号而不是逗号。我在这个实例中编写了一个项目并且它工作正常,如果不是我现在必须重写的所有代码,我会认为我犯了一个错误......

为了解决这个问题,任何提示都会受到赞赏。

EDIT2:

重新启动Excel后,它将模式更改为逗号,我已经使用了一段时间但是现在这个问题再次袭击了我,Excel开始使用';' (分号)而不是','(逗号)作为我的数据验证的分隔符。

这次我拍了一张截图。数据验证设置为List。

来源设置为:

zero,one,both

enter image description here

这是结果,因为您可以看到Excel不关心我的逗号并显示在同一行:

enter image description here

使用这样的源设置它可以工作:

zero;one;both

enter image description here

结果:

enter image description here

对我来说,为什么Excel这样做是个谜,但我真的需要找到一种方法来确保我的客户永远不会发生这种情况。 任何帮助表示赞赏!

3 个答案:

答案 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)