【发布时间】: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 用户名而变化。