【问题标题】:Code to add data validation throws no error, but also does not work添加数据验证的代码不会引发错误,但也不起作用
【发布时间】:2013-05-29 20:42:26
【问题描述】:

我正在尝试使用 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

编辑:我希望下拉列表出现的特定单元格不受保护,因此有关保护工作表的部分可能无关紧要。

任何想法都将不胜感激!

【问题讨论】:

  • 验证只会在单元格的后续更改中“开始”。
  • 芭丝谢芭,我没有完全理解。您对单元格的后续更改是什么意思?现在,如果单元格包含值“HI”(例如),如果我将其更改为“HO”,则验证不会“启动”并且不会出现下拉菜单。
  • 我认为@Bathsheba 的意思是您需要设置一个事件处理程序。像Private Sub Worksheet_SelectionChange(ByVal Target As Range) 这样的东西。换句话说,是什么告诉您的代码执行此操作?你有一个按钮,另一个事件处理程序等吗?
  • 此代码位于打开工作簿时运行的子程序中。编辑:列表中的选项根据使用工作簿的 Windows 用户名而变化。

标签: vba excel


【解决方案1】:

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

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

【讨论】:

  • 这是否意味着您不能设置任何单元格验证功能?如果应该持有验证的特定单元格被解锁怎么办?还没有时间通过​​我的工作表检查这个,但想问一下。
  • 似乎“验证”更像是工作表功能而不是单元格。因此锁定/解锁单元与此无关。我确实检查了它,因此我提出了建议。
  • 今天早上能够检查,您是正确的。在保护工作表之前进行验证可以解决问题。谢谢!
猜你喜欢
  • 2023-04-06
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2020-01-13
  • 2015-07-28
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多