【问题标题】:Populating a listbox with a range based on a combobox selection on a userform使用基于用户窗体上的组合框选择的范围填充列表框
【发布时间】:2015-09-24 13:56:39
【问题描述】:

从组合框下拉列表中选择选项后,我希望列表框根据该选项显示指定范围的结果。

我的理解是,在使用正确的值和属性之前,一个简单的 If/Then 语句就足够了。

我有一张 (Sheet1) 有两列。

A 列名为“字母”,B 列名为“数字”。
- 在 A 列范围 A2 = A、A3 = B、A4 = C、A5 = D。
- 在 B 列范围 B2 = 1、B3 = 2、B4 = 3、B5 = 4。

我希望在组合框 1 中选择范围 A2 时在列表框 1 中显示范围 B2。

我想使用和理解最简单的方法。

这是一个使用此思维过程的无效示例。

Private Sub ComboBox1_Change()
    If Me.ComboBox1.Value = "A" Then
        ListBox1.Value = Range(Sheet1!B2)
    End If        
End Sub

【问题讨论】:

  • 如果您想编辑与ID相关的数据,那么最好将其加载到TextBox中。

标签: excel vba


【解决方案1】:

我不确定您是否希望组合框的 A 列填充是动态的?作为一个快速演示...

在设计模式下,右键单击组合框>属性>其他>,然后将 ListFillRange 设置为 A2:A5。这将使用该范围内的数据填充组合框。双击组合框以访问代码屏幕。根据自己的控件名称适配如下逻辑:

Private Sub ComboBox1_Change()
  If ComboBox1.Value = "A" Then
     ListBox1.AddItem ActiveSheet.Range("b2")
  End If
End Sub

【讨论】:

    【解决方案2】:

    A => 1

    B => 2

    ComboBox1.ListIndex 将为您提供所选项目的索引(基数 0)

    所以我们可以写成

    ListBox1.Value = Range("B" & (ComboBox1.ListIndex + 2)).Value

    【讨论】:

      【解决方案3】:

      我不太确定你想要什么,但鉴于你的用户窗体包含一个名为 Combobox1 的 ComboBox 和一个名为 Listbox1 的 ListBox:

      Private Sub ComboBox1_Change()
          Dim r As Range
          Set r = [Sheet1!B2]
          ListBox1.Clear
          ListBox1.AddItem r.Offset(ComboBox1.ListIndex).Value
      End Sub
      
      Private Sub UserForm_Initialize()
          Dim r As Range
          Set r = [Sheet1!A2:A5]
          ComboBox1.List = r.Value
      End Sub
      

      如果 B 列包含 Ranges 而不是数字,则可以通过替换添加另一个级别的间接:

      ListBox1.Clear
      ListBox1.AddItem r.Offset(ComboBox1.ListIndex).Value
      

      ListBox1.List = Range(r.Offset(ComboBox1.ListIndex).Value).Value
      

      【讨论】:

        【解决方案4】:

        我所遵循的过程总结如下。 UserForm Initialise Routine 设置 ComboBox 和 ListBox 和 Worksheet 引用之间的关系。虽然我已经概括了联系人地址列表的更一般情况,这可能对许多人有用。

        Private Sub UserForm_Initialize()
            Set rData = ActiveSheet.Range("A1").CurrentRegion
            Me.ComboBox1.List = rData.Offset(1).Value
            Me.ListBox1.ColumnCount = 6
            Me.ListBox1.List = Me.ComboBox1.List
        End Sub
        

        ComboBox Change Routine 有以下代码。

        Private Sub ComboBox1_Change()
          Me.ListBox1.ListIndex = Me.ComboBox1.ListIndex
        End Sub
        

        有一个关闭按钮可以关闭表单。

        私有子 cmdClose_Click() 卸载我 结束子

        一般声明如下。

        Option Explicit
        Dim rData As Range
        

        下面附上联系人地址目录的图片。

        [![Contact address directory][1]][1]
        

        可以从这里下载示例文件https://www.dropbox.com/s/w5rnp8omkl5u0eu/sample_2409c.xlsm?dl=0

        【讨论】:

          猜你喜欢
          • 2020-10-28
          • 1970-01-01
          • 2020-04-03
          • 1970-01-01
          • 2021-07-11
          • 1970-01-01
          • 1970-01-01
          • 2016-02-29
          • 2023-01-28
          相关资源
          最近更新 更多