Попробуйте
colnum = Application.WorksheetFunction.Match("Reference", _
Worksheets("Reference").Rows(1), 0)
Но помните, что вы получите ошибку, если совпадение не найдено. Вы должны будете сделать правильную обработку ошибок. Например,
colnum = "Not Found"
On Error Resume Next
colnum = Application.WorksheetFunction.Match("Reference", _
Worksheets("Reference").Rows(1), 0)
On Error GoTo 0
Debug.Print colnum
Вышеуказанное явно не будет обрабатывать ошибки имени листа. Для этого вы можете использовать что-то вроде
On Error GoTo Whoa
colnum = Application.WorksheetFunction.Match("Reference", _
Worksheets("Reference").Rows(1), 0)
LetsContinue:
Debug.Print colnum
Exit Sub
Whoa:
colnum = Err.Description
Resume LetsContinue
Вы также можете попробовать .Evaluate
для решения с одним вкладышем
Application.Evaluate("=IFERROR(MATCH(""Reference"",Reference!1:1,0),""Not Found"")")
PS : Кстати, я слегка склонен к .Find
:)