VBA - 已过滤的列表包含多列

时间:2017-05-21 08:43:28

标签: excel vba excel-vba combobox

我有一张Excel工作表,它根据按钮对多列进行过滤,并填充一个组合框。

我的想法是构建具有多个类别的产品选择器(可以是多个类别的一部分)。

VBA不是我的领域,经过几天的搜索,我得到的解决方案非常不优雅。

我面临的问题:

  • VBA中的知识处理类型普遍缺乏,例如范围,数组等。
  • SpecialCells(xlCellTypeVisible) - >没有像我想象的那样表现 - 因此必须有多种排序才能将数据导入组合框

伪代码:

  1. 激活工作表并将命名范围复制到oldRange
  2. 选择 - >这样我就可以看到发生了什么。
  3. 如果已设置'清除
  4. ,则禁用自动过滤
  5. 使用自动过滤器排序和过滤
  6. 选择 - >所以我可以看到发生了什么
  7. 使用oldRange.offset(1,0)设置为newRange .SpecialCells(xlCellTypeVisible) - >摆脱标题和过滤行
  8. newArray = newRange
  9. combobox.list = newArray
  10. 电子表格: 数据来自不同格式的多个选项卡(由RadioButtons选择) 需要在comboBox中显示11列

    问题: 任何人都可以回答为什么newRange = oldRange.SpecialCells(xlCellTypeVisible)没有正确转移到combobox.list? 我可以在窗体后面的excel窗口中看到自动过滤器正在工作,然后选择正确的数据。 我面临的问题是它填充ComboBox列表,直到第一个隐藏/过滤值然后停止。这意味着我可以通过先排序来使其工作,但我并不相信我能够通过多种排序和扩展来扩展它。多个过滤器,避免良好值之间的任何隐藏值(导致组合框列表不完整)...

    虽然这可能有用,但我觉得我正在吃它,有没有更简单的方法将这些值输入到组合框中。

    提前致谢

1 个答案:

答案 0 :(得分:0)

确保正确设置ColumnCount属性。如果设置为1,则只显示一列。

最好在UserForm Initialize事件期间设置组合框的ColumnCount属性,如下所示......

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim oldRange As Range

    Set ws = Sheets("Sheet1")
    Set oldRange = ws.Range("A1").CurrentRegion

    Me.ComboBox1.ColumnCount = oldRange.Columns.Count
End Sub