从Excel组合框搜索,将结果重新显示为用户窗体

时间:2018-07-04 18:16:19

标签: excel vba search vlookup userform

我想从用户表单上的组合框中搜索,从2个不同的行返回2个项目。到目前为止,我正在使用预定的位置集来返回备用行。

我的问题与本节有关:

Private Sub ComboBox1_Change()
    If ComboBox1.Text = Sheet1.Cells(3, 1) Then
        oHousing.Text = Sheet1.Cells(3, 2)
        oMeal.Text = Sheet1.Cells(3, 3)
    End If
End Sub

这是伪代码的作用:

  1. 用户在组合框中选择项目
  2. 组合框将在A1:A99中搜索项目
  3. 然后找到项目后,它将输出B#C##基于A#的位置)
  4. B#输出到oHousing(文本框)
  5. C#输出到oMeal(文本框)

在我的工作表上,我有:

  • A2:A28带有随机文本(我使用ABC)
  • B2:B28是随机的3位数字(数字,例如001-999)
  • C2:C28是3个随机数字(数字,例如001-999)

这是我的其余代码:

'Finds the difference in 2 known dates (returns whole number in textbox)
Private Sub CommandButton1_Click()
    Dim firstDate As Date, secondDate As Date, n As Integer
    firstDate = DateValue(sDate.Text)
    secondDate = DateValue(EDate.Text)
    n = DateDiff("d", firstDate, secondDate) - 0.5
    dTotal.Text = n
End Sub

Private Sub CommandButton2_Click()    'Exit the userform (PerDiem)
    Unload PerDiem
End Sub

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您可以使用Find函数。

如果找到一个值,则可以使用Found.Row返回行号,并使用Count.Column返回列索引

Private Sub ComboBox1_Change()

Dim Found As Range
Set Found = Sheet1.Range("A1:A99").Find(ComboBox1.Text, , xlValues, xlWhole)

    If Found Is Nothing Then
        'What do you want to do if your value in CommboBox is not found in the range?
    Else
        oHousing.Text = Sheet1.Cells(Found.Row, 2)
        oMeal.Text = Sheet1.Cells(Found.Row, 3)
    End If

End Sub

如果您确定您的ComboBox值将始终存在于您的范围内(也许您已通过这种方式系统地对ComboBox值进行了编程),则可以跳过检查并简单地使用:

Dim Found As Range
Set Found = Sheet1.Range("A1:A99").Find(ComboBox1.Text, , xlValues, xlWhole)
    oHousing.Text = Sheet1.Cells(Found.Row, 2)
    oMeal.Text = Sheet1.Cells(Found.Row, 3)

您可以找到Find方法here的属性。如果要查找文本,则可能需要区分大小写(根据您的需要,THIS = this吗?)。当前应用的属性意味着函数正在寻找值(xlValues),特别是正在寻找单元格的整个值(xlWhole)。 IE。this valuethis不匹配)