如何将多个行源添加到 MSForms 列表框

How to add multiple rowsources to a MSForms listbox

一直在尝试为一个列表框设置多个范围,同时过滤我的 sheet。

我试过这个,但它给了我一个运行时间错误。

ListBox1.RowSource = Sheets("Sheet1").Range("A1:F1,A15:F15").Address

是否可以这样做?

编辑:我可以运行这没有错误

ListBox1.RowSource = Sheets("Sheet1").Range("A1:F1", "A15:F15").Address

但它用第 1 行填充列表 直到 15,不仅是 1 和 15...

您不能将不连续的范围设置为列表框RowSource,但您可以使用一个技巧。我的意思是创建一个数组,然后用不连续的范围区域填充它,并使用它的 List 属性.

加载列表框

请复制 UserForm_Initialize 事件中的下一个代码并显示表格:

Private Sub UserForm_Initialize()
  Dim arr, rng As Range, sh As Worksheet, K As Long
  Dim aRng As Range, C As Range
  
  Set sh = ActiveSheet
  Set rng = sh.Range("A1:F1,A3:F3")
  
  ReDim arr(1 To rng.cells.count)
  For Each aRng In rng.Areas
    For Each C In aRng
        K = K + 1: arr(K) = C.Value
    Next
  Next
  Me.ListBox1.list = Application.Transpose(arr)
End Sub

上述解决方案可以使用包含不连续范围内所有单元格的单列加载数组。

为了用两个范围 (6) 和两行中尽可能多的列填充数组,我将准备另一段代码并在几分钟后 post。

请测试下一个代码(在 Initialeze 事件中复制):

Private Sub UserForm_Initialize()
  Dim sh As Worksheet, aArr, fArr, combinedArr
  Set sh = ActiveSheet

  With Application
      aArr = .Index(Range("A1:F1").Value, 1, 0)
      fArr = .Index(Range("A3:F3").Value, 1, 0)
      combinedArr = .Transpose(Array(aArr, fArr))
  End With

  With Me.ListBox1
    .Clear
    .ColumnCount = 6
    .list = Application.Transpose(combinedArr)
  End With
End Sub