Private Sub Search_Click()
On Error GoTo MyErrorHandler:
Dim PartNumber As String
Dim det As String
PartNumber = PartNumberIN.Text ' take part input from textbox
det = "Part Number: " & Application.WorksheetFunction.VLookup(PartNumber, Application.WorksheetFunction.Offset(Table1, 0, 2), 3, False)
det = det & vbNewLine & "Part Description: " & Application.WorksheetFunction.VLookup(PartNumber, Application.WorksheetFunction.Offset(Table1, 0, 4), 5, False)
det = det & vbNewLine & "CV or VA: " & Application.WorksheetFunction.VLookup(PartNumber, Application.WorksheetFunction.Offset(Table1, 0, 1), 2, False)
det = det & vbNewLine & "Direct Ship?: " & Application.WorksheetFunction.VLookup(PartNumber, Application.WorksheetFunction.Offset(Table1, 0, 3), 4, False)
det = det & vbNewLine & "Storage Container: " & Application.WorksheetFunction.VLookup(PartNumber, Application.WorksheetFunction.Offset(Table1, 0, 6), 7, False)
det = det & vbNewLine & "SAP Location: " & Application.WorksheetFunction.VLookup(PartNumber, Application.WorksheetFunction.Offset(Table1, 0, 13), 14, False)
det = det & vbNewLine & "Physical Location: " & Application.WorksheetFunction.VLookup(PartNumber, Application.WorksheetFunction.Offset(Table1, 0, 14), 15, False)
MsgBox "Part Details : " & vbNewLine & det
Exit Sub
MyErrorHandler:
If Err.Number = 1004 Then
MsgBox "Part not present in table."
ElseIf Err.Number = 13 Then
MsgBox "You have entered an invalid value"
ElseIf Err.Number = 429 Then
MsgBox "You're toast"
End If
The message box should display: Part Number: (DATA PULLED) CV or VA: "" Direct Ship: ""
and so forth.
The data is pulled from a table on a separate sheet than the macro button. The button simply opens the userform.
Looking for help. The reason the table is used as a range is that this data will be updated regularly, and a named dynamic range does not work.
A bit simplified: I'm not following your use of Offset here, so you may need to adjust some of the column numbers...
Private Sub Search_Click()
Dim PartNumber As String
Dim det As String, m, rng
'get the table's data range
Set rng = ThisWorkbook.Sheets("Sheet1").ListObjects("table1").DataBodyRange
'Debug.Print rng.Address
PartNumber = PartNumberIN.Text ' take part input from textbox
'locate the row if there's a match in the first column
m = Application.Match(PartNumber, rng.Columns(1), 0)
If Not IsError(m) Then
'got a match, so construct the message
With rng.Rows(m)
det = "Part Number: " & PartNumber
det = det & vbNewLine & .Cells(5).Value
'etc...
MsgBox "Part Details : " & vbNewLine & det
End With
Else
'no match
MsgBox "Part not present in table."
End If
End Sub
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.