添加数据验证的代码不会引发错误,但也不起作用

时间:2013-05-29 10:49:36

标签: excel vba excel-vba

我正在尝试使用VBA添加一个下拉列表,该列表的长度可能会有所不同,具体取决于数组的大小。我没有收到以下代码的错误,但它实际上也没有添加数据验证...

要形成列表:

Dim RegionList as String
RegionList = ""
For i = LBound(x) To UBound(x)
    RegionList = RegionList + x(i) & ", "
Next

创建验证:

RegionList = Left(RegionList, Len(RegionList) - 2) 'Remove trailing Comma/Space

With Sheet2.Range("C1").Validation 'Insert dropdown to cell C1
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=RegionList
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

我应该注意,在使用以下公式运行此代码之前,工作表是受保护的:

Sheet2.Protect Password="xxx", DrawingObjects = False, UserInterfaceOnly = True

编辑:我想要显示下拉列表的特定单元格是不受保护的,因此关于保护工作表的位可能无关紧要。

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:3)

当工作表受到保护时,您无法添加单元格验证功能。即使您设置参数userInterfaceOnly:=true,仍然不允许。

在向单元格添加验证后,您需要移动保护代码。如果还不够,您可以在设置验证之前暂时取消保护,然后立即将其重新设置。