【问题标题】:ListBox populate based on ComboBox - different data structureListBox 基于 ComboBox 填充 - 不同的数据结构
【发布时间】:2017-05-23 15:04:54
【问题描述】:

进入选项卡“设置”我有自动生成的工作表列表:

列格式格式 A 看起来相同的工作表,只包含不同的值,所有 格式 B 看起来也一样,包含再次不同的价值观。

现在我正在向组合框添加值:

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

然后我想根据点击 cb3 的值填充 listBox2。但下面的代码对所有格式都一样。

Dim NameArray As Variant
With Sheets(Me.cb3.Value)
    NameArray = .Range(.Range("B6"), .Range("B6").End(xlDown))
    NameArray = .Range("A8:H100")
End With
listBox2.List =  NameArray

请帮忙。

不同范围的示例,基于格式

格式 A: 范围:A8:H100

格式 B: 范围:B10:G50

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

【问题讨论】:

  • 你能告诉我们输出是什么和它应该是什么
  • 请查看不同范围的示例
  • 所有工作表都得到相同结果的原因是因为在您尝试用.Range(.Range("B6"), .Range("B6").End(xlDown)) 占用NameArray 数组后,您“覆盖”它的下一行与NameArray = .Range("A8:H100")(总是相同的大小)
  • 那么如何调整它以适应不同的来源?就像一次是格式A,下一次是格式B?并且来源应该是不同的

标签: vba excel combobox listbox listboxitem


【解决方案1】:

我做了如下:

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

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

【讨论】:

    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多