我想从用户表单上的组合框中搜索,从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
这是伪代码的作用:
A1:A99
中搜索项目B#
和C#
(#
基于A#
的位置)B#
输出到oHousing
(文本框)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
谢谢大家!
答案 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 value
与this
不匹配)