我有一张Excel表,用于第三方输入的数据。为了限制错误的数据,我想将数据限制在某个项目列表中。
由于列表相当长,我想使用组合框,这样当他们开始键入正确的名称时就会显示出来。
这在测试中起到了作用,但当我发送Excel文件时,ActiveX组合框就开始发挥作用。这似乎是已知的行为,除了不使用ActiveX版本的组合框之外,没有进行修复。
我正在转换为使用组合框的Forms版本
除了组合框之外,还有一个简单的单元格,具有两个选项的数据验证:";Professioneel"以及";Particulier";。我使用onchange事件来捕捉选择是否发生了更改,然后用相应的列表填充组合框
这适用于ActiveX版本,但不适用于窗体版本。
下面的代码是我填充表单组合框的最新尝试If
语句的Else
子句仍然显示用于ActiveX版本组合框的代码。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C7")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
If Range("C7").Value = "Particulier" Then
ThisWorkbook.Worksheets(4).Shapes("ComboBox1").List = ThisWorkbook.Worksheets(8).Range("B2:B58").Value 'this does not work
Else
ComboBox1.List = ThisWorkbook.Worksheets(7).Range("B2:B434").Value 'this used to work for a combobox
End If
End Sub
我得到错误438。
如何在组合框的Forms版本中使用此行为,或者Forms版本中不支持此行为?
假设您的下拉列表名为"下拉1";,请尝试以下操作。
ThisWorkbook.Worksheets(4).Shapes("Drop Down 1").ControlFormat.List = ThisWorkbook.Worksheets(8).Range("B2:B58").Value
或者,您可以使用DropDowns集合参考您的下拉列表。
ThisWorkbook.Worksheets(4).DropDowns("Drop Down 1").List = ThisWorkbook.Worksheets(8).Range("B2:B58").Value