Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于组合框填充列表框-不同的数据结构_Vba_Excel_Combobox_Listbox_Listboxitem - Fatal编程技术网

Vba 基于组合框填充列表框-不同的数据结构

Vba 基于组合框填充列表框-不同的数据结构,vba,excel,combobox,listbox,listboxitem,Vba,Excel,Combobox,Listbox,Listboxitem,在“设置”选项卡中,我自动生成了图纸列表: 列格式:采用格式A的图纸外观相同,仅包含不同的值,所有采用格式B的图纸外观相同,再次包含不同的值 现在我正在向combobox添加值: Dim db_rows As Long, i As Long Dim wbs As Workbook Dim wss As Worksheet Set wbs = ActiveWorkbook Set wss = wbs.Worksheets("setting") db_rows = wss.Cells(Rows

在“设置”选项卡中,我自动生成了图纸列表:

列格式:采用格式A的图纸外观相同,仅包含不同的值,所有采用格式B的图纸外观相同,再次包含不同的值

现在我正在向combobox添加值:

Dim db_rows As Long, i As Long
Dim wbs As Workbook
Dim wss As Worksheet

Set wbs = ActiveWorkbook
Set wss = wbs.Worksheets("setting")

db_rows = wss.Cells(Rows.Count, 1).End(xlUp).Row

With cb3
    .Clear
        For i = 2 To db_rows
            If wss.Cells(i, 1).Value <> "" Then
                .AddItem wss.Cells(i, 2).Value
            End If
        Next i
End With
Me.cb3.ListIndex = 0
请帮忙

基于格式的不同范围示例

格式A: 范围:A8:H100

格式B: 范围:B10:G50

格式C: 范围:C20:B30 等等…

我做了如下工作:

Dim j, wss1, db_x As Long
Dim selected_value, format_db As String
wss1 = wss.Cells(wss.Rows.Count, "B").End(xlUp).Row
selected_value = Me.cmbListItem2.Value

Dim NameArray3 As Variant
Dim col_numA, col_numB As Integer
col_numA = 6
 col_numB = 3

   For j = 2 To wss1
       If wss.Range("B" & j).Value = selected_value Then
           format_db = wss.Range("C" & j).Value
           Exit For
       End If
   Next

   Select Case format_db
        Case "A"        
                With Sheets(Me.cmbListItem2.Value)
                db_x = .Cells(.Rows.Count, "A").End(xlUp).Row
                NameArray3 = .Range("A8:H" & db_x)
                End With

                With listBox2
                    .ColumnCount = col_numA
                    .List = NameArray3
                    .ColumnWidths = "50;200;50;50;50;50"
                    .MultiSelect = fmMultiSelectMulti
                End With

        Case "B"
                With Sheets(Me.cmbListItem2.Value)
                db_x = .Cells(.Rows.Count, "B").End(xlUp).Row
                NameArray3 = .Range("B10:G" & db_x)
                End With

                With listBox2
                    .ColumnCount = col_numB
                    .List = NameArray3
                    .ColumnWidths = "50;50;50;50;50;50"
                    .MultiSelect = fmMultiSelectMulti
                End With                
        Case Else            
    End Select

但是,如果你知道如何做得更好或采用不同的方式,请与我分享这个想法。

你能告诉我们输出是什么与应该是什么吗?请查看不同范围的示例。你在所有工作表中得到相同结果的原因是,在你尝试使用
范围(.Range(“B6”)占据
名称数组
数组之后,.Range(“B6”).End(xlDown))
,您将在下一行使用
NameArray=.Range(“A8:H100”)
(大小都相同)来“覆盖”它,那么如何调整它以适应不同的源呢?比如一次是格式A,下一次是格式B?而来源应该是不同的
Dim j, wss1, db_x As Long
Dim selected_value, format_db As String
wss1 = wss.Cells(wss.Rows.Count, "B").End(xlUp).Row
selected_value = Me.cmbListItem2.Value

Dim NameArray3 As Variant
Dim col_numA, col_numB As Integer
col_numA = 6
 col_numB = 3

   For j = 2 To wss1
       If wss.Range("B" & j).Value = selected_value Then
           format_db = wss.Range("C" & j).Value
           Exit For
       End If
   Next

   Select Case format_db
        Case "A"        
                With Sheets(Me.cmbListItem2.Value)
                db_x = .Cells(.Rows.Count, "A").End(xlUp).Row
                NameArray3 = .Range("A8:H" & db_x)
                End With

                With listBox2
                    .ColumnCount = col_numA
                    .List = NameArray3
                    .ColumnWidths = "50;200;50;50;50;50"
                    .MultiSelect = fmMultiSelectMulti
                End With

        Case "B"
                With Sheets(Me.cmbListItem2.Value)
                db_x = .Cells(.Rows.Count, "B").End(xlUp).Row
                NameArray3 = .Range("B10:G" & db_x)
                End With

                With listBox2
                    .ColumnCount = col_numB
                    .List = NameArray3
                    .ColumnWidths = "50;50;50;50;50;50"
                    .MultiSelect = fmMultiSelectMulti
                End With                
        Case Else            
    End Select