I am trying to create a search userform to search more than two columns of data(but two columns for now) and the data has repeated value. So, the users can enter 2 values to select a specific value or 1 value to select the first value found.
So what I did was to get the row number of two values entered by user. If those two values are on the same row select the value, if not, it loops and try to find the values on the same row
So, fRow is the 3rd row and gRow is the 4th row.
When I run the macro, I got all kinds of error messages in the last outer Else block and especially on the following two lines
Set f = Columns(3).Cells.FindNext(f)
fRow = f.Row
I have been spending too much time debugging the code and my boss is getting angry about my slowlyness. So, I haven't got much time left to finish this project
The following is the main part of the entire code, I would be greatly appreciated if you could spend some time to look over and correct any logic mistakes or syntex in there.
Thanks in advance
If you need more information please let me know
The following is the code:
Private Sub SearchButton_Click()
MillToFind = tbMillToFind.Text
GrdeToFind = tbGrdeToFind.Text
ColrToFind = tbColrToFind.Text
BswtToFind = tbBswtToFind.Text
LongGradeDescriptionToFind = tbLongGradeDescription.Text
Set e = Columns(2).Find(What:=GrdeToFind, LookAt:=xlWhole)
Set f = Columns(3).Find(What:=ColrToFind, LookAt:=xlWhole)
Set g = Columns(4).Find(What:=BswtToFind, LookAt:=xlWhole)
If f Is Nothing Then
MsgBox ColrToFind & "Colour Code was not found.", vbInformation, "Result"
With tbColrToFind
.SelStart = 0
.SelLength = 100
.SetFocus
End With
Exit Sub
ElseIf f = "" Then
If g Is Nothing Then
MsgBox BswtToFind & "Basis Weight was not found.", vbInformation, "Result"
With tbBswtToFind
.SelStart = 0
.SelLength = 100
.SetFocus
End With
Exit Sub
ElseIf g = "" Then
Else
g.Activate
Unload Me
End If
Else
If g Is Nothing Then
MsgBox BswtToFind & "Basis Weight was not found.", vbInformation, "Result"
With tbBswtToFind
.SelStart = 0
.SelLength = 100
.SetFocus
End With
Exit Sub
ElseIf g = "" Then
f.Activate
Unload Me
ElseIf f.Address = g.Offset(0, -1).Address Then
f.Activate:
Unload Me
Else
Dim fRow As Double
Dim gRow As Double
fRow = f.Row
gRow = g.Row
'if f's row number = g's row number
If fRow = gRow Then
'show data
fActivate:
Unload Me
'elseif f's row number < g's row number
ElseIf fRow < gRow Then
MsgBox "fRow < gRow"
'while f's row number < g's row number
Do While fRow < gRow
Set f = Columns(3).Cells.FindNext(f)
fRow = f.Row
'endloop
Loop
MsgBox fRow & " " & gRow
'if f's row number = g's row number
If fRow = gRow Then
'message found
f.Activate:
Unload Me
Else
' 'message notfound
MsgBox "Message not Found"
End If
Else
MsgBox "frow > grow"
'while f's row number > g's row number
Do While fRow > gRow
'g = g.findnext
Set g = Columns(4).Cells.FindNext(g)
gRow = g.Row
'endloop
Loop
'if f's row number = g's row number
If fRow = gRow Then
'msgbox found
g.Activate:
Unload Me
Else
'msgbox not found
MsgBox "Data not found"
End If
End If
End If
End If
End Sub