如何将多个行源添加到 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
一直在尝试为一个列表框设置多个范围,同时过滤我的 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