Sub Sales_Summary_Macro()
Dim strMake, strModel, strCount As String
Dim makeLoc, modelLoc, countLoc As Integer
strMake = Application.InputBox("Make")
strModel = Application.InputBox("Model")
strCount = Application.InputBox("Count")
If strMake <> False Then
Debug.Print strMake
Debug.Print strModel
Debug.Print strCount
makeLoc = WorksheetFunction.Match(strMake, Range("A1:A10"), 0)
Debug.Print makeLoc
End If
End Sub
I just want to take the string input of the user on three different variables and find the column that contains each variable. I have tried Application.Match() and Match() alone and neither seem to work.
UPD:
BTW,
when you are using
Dim strMake, strModel, strCount As String
, onlystrCount
has typeString
, butstrMake, strModel
areVariant
.The same thing with
Dim makeLoc, modelLoc, countLoc As Integer
- onlycountLoc
hasInteger
type.Not going full technical and will not post code. However, three things:
One, make sure your ranges are always fully qualified. For example,
Range("A1:A10")
is not nearly enough. You should specify on which sheet this should be located. If you are calling this macro from another sheet, it will give you a wrong result or throw an error.Two, without going to too much details:
Application.Match
returns an error value if there's no match found. This can be handled usingIsError
, which is what simoco did in his answer.WorksheetFunction.Match
throws a1004
error when it doesn't find an error. This is not the same as returning a value. As such, this is (slightly) harder to handle.Best practice is to always use the first one.
Three, the immediate window in VBE is your best friend. A simple
?Application.Match("FindMe", [A1:A10], 0)
in the window can help you check if your formula is netting a similarly intended result.As shown in the screenshot above, no string is found and an error value is returned.
Hope this helps!
This is not a direct answer to the OP, but people (like me) may find this question helpful when trying to TRAP an error with vba
Match
. Typically I would use this to test if a value exists in an array.It's quite maddening when using
Application.Worksheetfunction.Match
and being unable to capture aTrue
withIsError
when a value doesn't exist. Even theWorksheetFunction
error handlers (iserr
,isNA
, etc) will not capture this asTrue
and instead throws the VBA error of 1004 Unable to get the Match Property.This is resolved by using
Application.Match
instead ofApplication.WorksheetFunction.Match
. This is most counterintuitive asMatch
doesn't appear in the intellisense after typingApplication.
nor doesApplication.Match(
display prompts for what fields to enter.Meanwhile using
Application.WorksheetFunction.Match
does auto-populate with prompts which understandably can inspire users to take this approach and then be confused why they can't successfully trap an error.