Lookup Function in user form

R

Rachel

I have a combo box (cboitem1) and a text box (txtprice1). I am using the code
below to have txtprice1 fill with the corresponding price the worksheet:

Private Sub Cboitem1_Change()
If cboItem1 <> "" Then
txtprice1.Value = Excel.WorksheetFunction.VLookup(cboItem1.Value,
Sheets("Pizzas").Range("A1:B65536"), 2, False)
End If
End Sub

It works perfectly when you enter an existing value in cboitem1. However if
'the user' accidently types a letter that is not the first letter of one of
the existing items VB debugging pops up with error "Unable to get the Vlookup
property..."

I am assuming this is because the Vlookup function is giving afalse value.
How can I get it to not revert to the debugging and just give an error
message?

Thanks in advance!
R
 
J

john

Rachel,
see if this approach works for you.
I have assumed Item is in Col 1 (A) & Price in Col 2 (B) change as required.

Private Sub Cboitem1_Change()
Dim Foundcell As Range
Dim Search As String

Search = Cboitem1.Text

If Cboitem1 <> "" Then

With ThisWorkbook.Worksheets("Pizzas")

Set Foundcell = .Columns(1).Find(Search, _
After:=.Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)

End With

If Foundcell Is Nothing = False Then

txtprice1.Text = Foundcell.Offset(0, 1).Value

End If

End If

End Sub
 
R

Rachel

Thank you John, works great!


john said:
Rachel,
see if this approach works for you.
I have assumed Item is in Col 1 (A) & Price in Col 2 (B) change as required.

Private Sub Cboitem1_Change()
Dim Foundcell As Range
Dim Search As String

Search = Cboitem1.Text

If Cboitem1 <> "" Then

With ThisWorkbook.Worksheets("Pizzas")

Set Foundcell = .Columns(1).Find(Search, _
After:=.Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)

End With

If Foundcell Is Nothing = False Then

txtprice1.Text = Foundcell.Offset(0, 1).Value

End If

End If

End Sub
 
R

Rachel

One other thing - if the user clears all the entry from cboitem1 the price
stays in txtprice1. Can it be cleared as well. I tried putting a blank row at
the top of the worksheet where the data is so A1 and B1 are both blank. But
this doesn't work....

Thanks again.
 
J

john

Hi Rachel,
thought about that after I posted.
Following should do what you want & also added bit extra to make backcolor
red if invalid - you can modify as required.

If you need any further help contact me directly nospamdt @ btinternet .com
(close spaces)

Private Sub Cboitem1_Change()
Dim Foundcell As Range
Dim Search As String

Search = Cboitem1.Text

If Search <> "" Then

With ThisWorkbook.Worksheets("Pizzas")

Set Foundcell = _
.Columns(1).Find(Search, _
After:=.Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)

End With

If Foundcell Is Nothing = False Then

With txtprice1

.Text = Format(Foundcell.Offset(0, 1).Value, "£0.00")

'make backcolor white
.BackColor = &HFFFFFF

End With

Else

With txtprice1

.Text = ""

'make backcolor red
.BackColor = &HFF&

End With

End If

End If

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top