In this post I will show you how to add a search function to a data entry application. I have already created the data entry form and sheet to save the data.
This is the form used to input the data.
Entered data will be saved to this worksheet.
Now the next step is to add the search function to this application. There are two ways to do that. We can either add the search function to existing data input form or add the search function to a dedicated form. So in this example I’m going to add the search function to a separate form. After creating the two forms you can add buttons to switch between each form. Here is the search form designed for this application. Labels and textboxes are the same as input form. I have changed the title to “SEARCH ORDER INFORMATION”. Also the “ENTER” button is replaced by the “SEARCH” button. Name of the “SEARCH” button is “cmdSearch''.
In this application, users will be able to search the information using the order number. So the user will enter the order number they want to search and click on the search button. Then the program will check the data sheet and show the relevant information in the form.
Now let’s develop the code for the “SEARCH” button.
First we need to declare a few variables
Dim WS_Data As Worksheet
Dim LastRow As Long
Dim i As Long
Dim SearchedValue As String
Dim DataArr() As Variant
Then assign the worksheet for the WS_Data variable.
Set WS_Data = Worksheets("Data")
Next find the last row of the Data sheet.
LastRow = WS_Data.Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Now we need to find the matching row from the data sheet and show that information in the form. There are various ways to find the matching row from the data sheet. This post explains three different ways to find the matching row.
Get Row Number of a Matching Value
So I’m going to use the method 2 explained in that post. In this method we use an array to hold all the data in the worksheet. Using an array will increase the speed of the searching process if you have a large amount of data.
Add all the data from Data sheet to an array.
DataArr = WS.Range("A1:G" & LastRow)
Name of the “Order Number” textbox is txtOrderNumber. So we can assign the value to the SearchedValue variable from the Order Number textbox like this.
SearchedValue = txtOrderNumber.Value
Before proceeding further we need to check whether the user has entered a value to the Order Information textbox.
If Len(SearchedValue) > 0 Then
End If
Above If statement will be true if there is a value in the textbox.
Then we can use a For Next statement to loop through the data of the array.
If Len(SearchedValue) > 0 Then
For i = 1 To UBound(DataArr, 1)
Next i
End If
Check for the matching value using StrComp function
If Len(SearchedValue) > 0 Then
For i = 1 To UBound(DataArr, 1)
If StrComp(DataArr(i, 1), SearchedValue, vbTextCompare) = 0 Then
End If
Next i
End If
If a match is found then write information from that row to textboxes and exit the for loop.
If Len(SearchedValue) > 0 Then
For i = 1 To UBound(DataArr, 1)
If StrComp(DataArr(i, 1), SearchedValue, vbTextCompare) = 0 Then
txtSize.Value = DataArr(i, 2)
txtSerialNumber.Value = DataArr(i, 3)
txtProjectNumber.Value = DataArr(i, 4)
txtType.Value = DataArr(i, 5)
txtDate.Value = DataArr(i, 6)
txtSurveyor.Value = DataArr(i, 7)
Exit For
End If
Next i
End If
So the complete code of the “SEARCH” button should look like this.
Private Sub cmdSearch_Click()
Dim WS_Data As Worksheet
Dim LastRow As Long
Dim i As Long
Dim SearchedValue As String
Dim DataArr() As Variant
Set WS_Data = Worksheets("Data")
LastRow = WS_Data.Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
DataArr = WS_Data.Range("A1:G" & LastRow)
SearchedValue = txtOrderNumber.Value
If Len(SearchedValue) > 0 Then
For i = 1 To UBound(DataArr, 1)
If StrComp(DataArr(i, 1), SearchedValue, vbTextCompare) = 0 Then
txtSize.Value = DataArr(i, 2)
txtSerialNumber.Value = DataArr(i, 3)
txtProjectNumber.Value = DataArr(i, 4)
txtType.Value = DataArr(i, 5)
txtDate.Value = DataArr(i, 6)
txtSurveyor.Value = DataArr(i, 7)
Exit For
End If
Next i
End If
End Sub
Assume a user enters 8782 and performs a search.
Then the program will show the result in the form like this.