【问题标题】:VBA Create search results in userform listboxVBA在用户表单列表框中创建搜索结果
【发布时间】:2019-08-20 11:44:23
【问题描述】:

如果 textbox1 和 textbox2 的值与单元格值匹配,我正在尝试创建一个在列表框中显示结果的用户表单

Textbox1 将 = 单元格值 I1 Textbox2 的值为 yes、no、maybe(无论单元格 H1 中的内容)

然后列表框结果将返回,即 A 列数据 Mon、Tues 等以及单元格 c3 下方列中的所有 Yes 结果,我只能返回 c3 中的值

Private Sub CommandButton1_Click()

Dim myString

Sheets("Sheet1").Select
Range("I1").Select
myString = Range("I1")

UserForm1.TextBox1.Text = myString

Sheets("Sheet1").Select
Range("H1").Select
myString = Range("H1")

UserForm1.TextBox2.Text = myString

Dim rng As Range
Dim ws As Worksheet
Dim i As Integer

Set ws = Worksheets("Sheet1")
Set rng = ws.Range("B3:G3")
Set fnd = rng.Find(TextBox1)
If fnd Is Nothing Then MsgBox TextBox1 & " not found": Exit Sub
Set first = fnd
With ListBox1
    .Clear
    .AddItem fnd.Offset(, 0)
    .List(.ListCount - 1, 1) = fnd.Offset(, -1)
    .List(.ListCount - 1, 2) = fnd.Offset(, 1)


    Do
        Set fnd = rng.FindNext(fnd)
        If fnd.Address = first.Address Then Exit Do
            .AddItem fnd.Offset(, 0)
            .List(.ListCount - 1, 1) = fnd.Offset(, -1)
            .List(.ListCount - 1, 2) = fnd.Offset(, 1)

    Loop
    End With
    End Sub

【问题讨论】:

    标签: excel vba userform listboxitem


    【解决方案1】:

    简化示例调用

    假设H1 中的单元格值是文本字符串且没有数据,我将向您展示一种简化方法,将数据块分配给二维(基于 1)数组以方便搜索。请注意,列表框的.List 属性必须由从零开始的索引引用。

    Private Sub CommandButton1_Click()
    'Prefill textboxes with choice from sheet
    If Me.TextBox1.Text = vbNullString Then Me.TextBox1.Text = Sheet1.Range("I1")
    If Me.TextBox2.Text = vbNullString Then Me.TextBox2.Text = Sheet1.Range("H1")
    
    'Find column caption (e.g. "1-3")
    Dim ws    As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Dim fnd   As Range
    Set fnd = ws.Range("B3:G3").Find(TextBox1)
    If fnd Is Nothing Then MsgBox TextBox1 & " not found": Exit Sub
    
    With ListBox1
        .Clear
        .ColumnCount = 2            ' (if not defined yet in UserForm_Layout or Initialize)
        'write data to 2-dimensional 1-based array
        Dim myData As Variant
        myData = ws.Range("A4:G8")
    
        Dim i As Long
        For i = 1 To UBound(myData)          ' loop through rows in data array
            If LCase(myData(i, fnd.Column)) = LCase(TextBox2) Then ' check Yes|No|Maybe
                .AddItem myData(i, 1)        ' add item row to list & weekday as first value
                .List(.ListCount - 1, 1) = myData(i, fnd.Column)
            End If
        Next i
        End With
    End Sub
    

    【讨论】:

    • @Andy - 对您的用户表单列表框问题发布了一个较晚的答案,演示了一种数组方法 - 希望得到反馈:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多