Using VLookup on user form (VBA)

L

Lucas Reece

In my workbook I have an "Employees" sheet. Column A is headed
'Payroll Number' and column B is 'Employee Name'.

I then have a combobox in a userform which takes the Payroll Number
from the Employees sheet. To the side of this combo box I have a text
box to store the employee name. When I select a payroll number I need
the employee name to be automatically populated in the employee name
text box using a vlookup(?) from the "Employees" sheet.

My VB skills are limited so looking for a solution if anyone can help
please.

Many thanks.
 
P

p45cal

Could you supply a cut down version of your workbook to save us havin
to reproduce your scenario
 
L

Lucas Reece

Of course. File can be downloaded from http://sites.google.com/site/lucasreece/files.
Download issues.xls

Clicking on the new issue command button opens the user form. Issue ID
is automatically generated. Use the combo box to select an employee
payroll number which is taken from the Empoyees sheet. When a payroll
number has been selected, I need the name text box to display (using a
lookup maybe?) the name for the selected payroll number from the
Employees sheet.

Hope that makes sense.

Thanks.
 
L

Lucas Reece

UPDATE:

I've added this to the vba code...

Private Sub cboPayrollNumber_Change()
Me.txtName = WorksheetFunction.VLookup(Me.cboPayrollNumber, _
Worksheets("Employees").Range("A:D"), 4, 0)
End Sub

Now, when I click on the new issue button I get this...

'Run-time error: '1004':
Unable to get the VLookup property of the WorksheetFunction class.

Any ideas please? Need resolving quite urgently now if someone could
help me out please.

Thank you.
 
M

Mike H

Hi,

Add this change event code to cboPayrollNumber and every time you change the
payrol number the employee name is added to the text box called txtName.
Because you clear the combobox in the ADD button code we need on On Error
statement.

Note I convert the lookup to a value because the combobox is returning a
string

Private Sub cboPayrollNumber_Change()
Dim LastRow As Long
On Error Resume Next
LastRow = Sheets("Employees").Cells(Cells.Rows.Count, "A").End(xlUp).Row
txtName.Text = WorksheetFunction.VLookup(Val(cboPayrollNumber.Text), _
Sheets("Employees").Range("A2:B" & LastRow), 2, False)
End Sub


Mike
 
L

Lucas Reece

Excellent! That worked. Thanks for that Mike.

However I now have another issue so hoping you can help if that's OK?

When I click the Add button after creating a new issue, the message
box is displayed saying issue complete which if fine but then when I
click OK, I get a message box displayed saying "Invalid Property
Value"!

I've google this afternoon but can't seem to find a solution to this.
Any ideas please?

New file at http://sites.google.com/site/lucasreece/files. Download
issues.xls

Many thanks.


Hi,

Add this change event code to cboPayrollNumber and every time you change the
payrol number the employee name is added to the text box called txtName.
Because you clear the combobox in the ADD button code we need on On Error
statement.

Note I convert the lookup to a value because the combobox is returning a
string

Private Sub cboPayrollNumber_Change()
Dim LastRow As Long
On Error Resume Next
LastRow = Sheets("Employees").Cells(Cells.Rows.Count, "A").End(xlUp).Row
txtName.Text = WorksheetFunction.VLookup(Val(cboPayrollNumber.Text), _
Sheets("Employees").Range("A2:B" & LastRow), 2, False)
End Sub

Mike

Lucas Reece said:
I've added this to the vba code...
Private Sub cboPayrollNumber_Change()
    Me.txtName = WorksheetFunction.VLookup(Me.cboPayrollNumber, _
    Worksheets("Employees").Range("A:D"), 4, 0)
End Sub
Now, when I click on the new issue button I get this...
'Run-time error: '1004':
Unable to get the VLookup property of the WorksheetFunction class.
Any ideas please? Need resolving quite urgently now if someone could
help me out please.
 
L

Lucas Reece

Can anyone offer any assistance with this one please?

Many thanks.

Excellent! That worked. Thanks for that Mike.

However I now have another issue so hoping you can help if that's OK?

When I click the Add button after creating a new issue, the message
box is displayed saying issue complete which if fine but then when I
click OK, I get a message box displayed saying "Invalid Property
Value"!

I've google this afternoon but can't seem to find a solution to this.
Any ideas please?

New file athttp://sites.google.com/site/lucasreece/files. Download
issues.xls

Many thanks.

Add this change event code to cboPayrollNumber and every time you change the
payrol number the employee name is added to the text box called txtName..
Because you clear the combobox in the ADD button code we need on On Error
statement.
 
P

p45cal

Lucas said:
Can anyone offer any assistance with this one please?

Many thanks.

The Invalid property error you're getting is from one of the comboboxe
which while clearing the data you set to "". Since the MatchRequire
property is set to True and "" is not in the dropdown list - i
complains when the control loses focus.

Several solutions:
One possibility is to set the MatchRequired property to False for bot
comboboxes. This coulds lead to problems when users try to enter thei
own values which aren't in the list.

Another possibility is to add the "" as an item to each combobox, sa
at the top of the list. For some reason if you use the line
Me.cboProductID.Value = ""
to try to set it to that value, it doesn't work properly, but thi
does:
Me.cboPayrollNumber.ListIndex = 0
if, of course, the "" is at the top. Ensure this by making it the firs
item with the line:
Me.cboPayrollNumber.AddItem ""
immediately before:
For Each cPayrollNumber In....
in the initialising routine.
(the same for the other combobox).

(By the way, I did try to set the .listindex to -1, but that didn'
work either.)

You will probably come up against a new problem, now that the code i
being allowed to run beyond the Invalid Property error, and that is th
change/afterUpdate events associated with some of the other control
which try to calculate things.. - some more if statements in those even
handlers for you to code!

As an aside, I notice that you populate 2 columns in each combobox
Instead of using a vlookup to return the description/name, you could us
the .value property of the combox if the bound column is set to 2.
Take a look at the Remarks section in vba help for the TextColum
property and the BoundColumn property of comboboxes
 
P

p45cal

Curious..you ask a question, you prompt again for an answer 17 hours
later, you get my response less than 3 hours after that.. 46 hours after
that and you seem to have lost interest.
 
L

Lucas Reece

Sorry p45cal.

I've been struggling to get on PC to be honest and I've not been too
well today :eek:( I'm not purposely ignoring the help that anyone and
especially your good self has given on this thread.

Thanks for your help on this.
 

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