如何使用VBA在工作表上动态填充MSForms组合框



我有一张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

相关内容

  • 没有找到相关文章

最新更新