【问题标题】:Excel Userform Multiple ComboboxExcel 用户窗体多个组合框
【发布时间】:2018-07-22 16:25:00
【问题描述】:

我有一个带有 (2) 个组合框的 Excel 用户窗体。两个组合框都列出了“H”范围内的信息,ComboBox2 应该列出“V”范围内的信息。有什么想法我在这里做错了吗?我对 VBA 还是很陌生,我知道我的代码可能很草率。请保持通俗易懂,谢谢!

Private Sub Userform_Initialize()
LookAhead.Caption = Span & " Week Look Ahead"

' Sets range for ComboBox lists
    Dim rng As Range, r As Range, rng2 As Range, r2 As Range

    Set rng = Sheet1.Range("H2:H65536")
        For Each r In rng
            AddUnique r.value
        Next r
    Set rng2 = Sheet1.Range("V2:V65536")
        For Each r2 In rng2
            AddUnique r2.value
        Next r2

    End Sub

' Filter out duplicates in lists for UserForm ComboBoxes

Sub AddUnique(value As Variant)
    Dim i As Integer
    Dim inList As Boolean

    inList = False
    With Me.ComboBox1
        For i = 0 To Me.ComboBox1.ListCount - 1
            If Me.ComboBox1.List(i) = value Then
                inList = True
                Exit For
            End If
        Next i

        If Not inList Then
            .AddItem value
        End If
    End With

    Dim ii As Integer
    Dim inList2 As Boolean

    inList2 = False
    With Me.ComboBox2
        For ii = 0 To Me.ComboBox2.ListCount - 1
            If Me.ComboBox2.List(ii) = value Then
                inList2 = True
                Exit For
            End If
        Next ii

        If Not inList2 Then
            .AddItem value
        End If
    End With
End Sub

【问题讨论】:

  • 欢迎来到 Stack Overflow:您不是在问 good, clear, concise question 请阅读 How to ask a good question,然后编辑您的问题以包含代码、预期行为和 出了什么问题...那么我们可以尝试提供帮助
  • 上面列出了错误:“两个组合框都列出了“H”范围内的信息,而 ComboBox2 应该列出了“V”范围内的信息。”我似乎无法为 combobox2 的另一个范围添加代码。 Combobox1 应列出“H”列中的数据,Combobox2 应列出“V”列中的数据。我不确定这样做的正确方法是什么。
  • 我知道两个组合框都有相同的列表,并且列表包含“H”范围内的信息。他们也有来自“V”范围的数据吗?如果他们这样做,它可能会在列表的底部。
  • 是的——“H”范围在顶部,“V”范围在两个组合框的底部。我正在尝试对找到的代码进行逆向工程,但到目前为止还没有运气。

标签: vba excel


【解决方案1】:

成功!我这样做了,它似乎正在工作:

Dim Cl As Range
Dim Area As String
Dim TCR As String

    With CreateObject("scripting.dictionary")
        For Each Cl In Sheets("Projects").ListObjects("Table1").ListColumns(22).DataBodyRange
            If Not .exists(Cl.value) Then .Add Cl.value, Nothing
        Next Cl
         ComboBox1.Clear
         ComboBox1.List = Application.Transpose(.keys)
         .RemoveAll
    End With

    With CreateObject("scripting.dictionary")
        For Each Cl In Sheets("Projects").ListObjects("Table1").ListColumns(8).DataBodyRange
            If Not .exists(Cl.value) Then .Add Cl.value, Nothing
        Next Cl
         ComboBox2.Clear
         ComboBox2.List = Application.Transpose(.keys)
         .RemoveAll
    End With
    End Sub

【讨论】:

    【解决方案2】:

    AddUnique 子中,您传递要作为参数添加的值,然后将该值添加到ComboBox1ComboBox2。由于您要为每个组合框添加不同的值,因此需要稍微调整代码,以便您还可以通过某种方式确定要将值添加到哪个组合框。

    一种方法是在我下面包含的代码中。我没有直接引用每个组合框,而是添加了一个组合框参数。然后,当调用AddUnique 时,您还可以指定应该将值添加到哪个组合框。

    另一种选择(假设您在这里只使用了两个组合框)是有一个布尔参数,当它为 true 时,会将值添加到 Combobox1,如果为 false,则将值添加到 @ 987654326@.

    或者不是实际传入组合框,而是将参数更改为控件名称的字符串,并通过Me.Controls(control_name)访问控件


    Private Sub Userform_Initialize()
    LookAhead.Caption = Span & " Week Look Ahead"
    
    ' Sets range for ComboBox lists
        Dim rng As Range, r As Range, rng2 As Range, r2 As Range
    
        Set rng = Sheet1.Range("H2:H65536")
            For Each r In rng
                AddUnique r.value, Me.ComboBox1
            Next r
        Set rng2 = Sheet1.Range("V2:V65536")
            For Each r2 In rng2
                AddUnique r2.value, Me.ComboBox2
            Next r2
    
        End Sub
    
    ' Filter out duplicates in lists for UserForm ComboBoxes
    
    Sub AddUnique(value As Variant, combobox as Variant)
        Dim i As Integer
        Dim inList As Boolean
    
        inList = False
        With combobox
            For i = 0 To .ListCount - 1
                If .List(i) = value Then
                    inList = True
                    Exit For
                End If
            Next i
    
            If Not inList Then
                .AddItem value
            End If
        End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多