在初始化期间使用更高效的代码填充列表框

问题描述 投票:0回答:1

相关文章:VBA 用户窗体列表框 - 运行时错误 380。无法设置列表属性。属性值无效

@taller 帮助我简化了用于在列表框中搜索记录的命令按钮代码。我以为我可以将这些知识转移到初始化过程中,但我没有任何运气。我很新,所以我欢迎更多的解释/评论。下面显示了 OLD 代码和我对 NEW 代码的尝试,但该代码不起作用。预先感谢您的考虑!

Private Sub UserForm_Initialize()
'redacted code here

    'Add items to combobox list. Each list item MUST match their respective column header.
    cboSearchItem.List = Array("Shop Order", "Suffix", "Proposal", "PO", "SO", "Quote", _
    "Transfer Order", "Customer Nickname", "End User Nickname") '1-dimensional array

    ************OLD*****************
    lstMaster.ColumnWidths = "0;0;40;48;108;0;0;0;0;0;0;0;0;50;0;0;0;0;0;0;0;0;72;0;0;0;0;0;0;0;0;0;50;35;0;0;0;0;0;0;45;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;100;0;0"
    lstMaster.ColumnCount = 125  'Number of total columns
    lstMaster.List = Sheets("Master").Range("A4:DU" & Sheets("Master").Cells(Rows.Count, 1).End(xlUp).Row).Value
    ********************************************
    
    ************NEW****************
    Const COL_WIDE = "40;48;108;50;72;50;35;45;100;100"
    Const COL_INDEX = "3;4;5;14;23;33;34;41;96;121" ' Column numbers that appear in ListBox
    Const START_ROW = 4 ' the first data row
    Dim aIndex
        aIndex = Split(COL_INDEX, ";")
    Dim ColCnt As Long
        ColCnt = UBound(aIndex) + 1
    With lstMaster
        .Clear
        .ColumnCount = ColCnt
        .ColumnWidths = COL_WIDE
        .List = Sheets("Master").Range("A4:DU" & Sheets("Master").Cells(Rows.Count, 1).End(xlUp).Row).Value
    End With
   ********************************************** 
'redacted code here
    End With
arrays vba listbox userform
1个回答
0
投票

请替换并添加代码行如下:

Sub ReplaceCodeLines()
 'your existing code
 '.........
 'replace:
 'Const COL_INDEX = "3;4;5;14;23;33;34;41;96;121"
 'with
 Dim aIndex(): aIndex = Array(3, 4, 5, 14, 23, 33, 34, 41, 96, 121)
 
 'add the next code:____________________________________________________
 Dim arr, wsM As Worksheet
 Set wsM = ActiveSheet ' sheets("Master")
 arr = wsM.Range("A4:DU" & wsM.cells(rows.count, 1).End(xlUp).row).value
 arr = Application.index(arr, Evaluate("row(1:" & UBound(arr) & ")"), aIndex) 'array containing only chosen columns
 '______________________________________________________________________
 
 'replace
 '.List = Sheets("Master").....
 'with
 'List = arr
 ''your existing code
 
 '...........
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.