Excel VBA: no se puede get la propiedad Match de la class WorksheetFunction

Estoy tratando de hacer una búsqueda de coincidencia entre dos libros de trabajo para ver si un nombre ingresado en Wbook1 está en la columna A de Wbook2. Por ejemplo … Tengo "name1" en la celda D4 de workbook1 … Entonces quiero que la macro busque en la columna A de workbook2 para encontrar dónde está "name1". No me preocupa que el nombre no exista en el libro de trabajo2, ya que siempre debería estar allí.

Usando Excel 2007, el código es:

Sub ViewData() Dim xlo As New Excel.Application Dim xlw As New Excel.Workbook Dim xlz As String Dim result As Double Dim SalesExec As String SalesExec = Range("d4").Value 'D4 contains the name from workbook1 I want to search for xlz = Range("y1").value 'This cell contains the file path for workbook 2 Set xlw = xlo.Workbooks.Open(xlz) 'Path is correct as the desinetworking workbook does open result = Application.WorksheetFunction.Match(SalesExec, xlo.Worksheets("Data").Range("A:A"), 0) 'Data is the sheet in workbook2 containing the list of names Range("Q14").value = result xlw.Save xlw.Close Set xlo = Nothing Set xlw = Nothing End Sub 

Si elimino .WorksheetFunction, obtengo un 'error definido por object o aplicación'. A medida que el código se mantiene, obtengo el error "no se puede get la propiedad de coincidencia de la class de function de la hoja de trabajo" y no estoy seguro de por qué.

Cualquier ayuda sería muy apreciada. ¡Gracias!

Prueba esto. He comentado el código para que no tenga problemas para entenderlo.

 Sub ViewData() Dim xlo As New Excel.Application Dim xlw As New Excel.Workbook Dim xlz As String Dim result As Double Dim LRow As Long Dim SalesExec As String SalesExec = Range("d4").Value xlz = Range("y1").Value Set xlw = xlo.Workbooks.Open(xlz) With xlw.Worksheets("Sheet1") '~~> Find the last row cause Range("A:A") in match will give error LRow = .Range("A" & .Rows.Count).End(xlUp).Row End With xlo.Visible = True '~~> Result is double so ensure that whatever you are trying to find is as Double '~~> Also It should be xlw.Worksheets("Data") and not xlo.Worksheets("Data") result = Application.WorksheetFunction.Match(SalesExec, xlw.Worksheets("Data").Range("A1:A" & LRow), 0) Range("Q14").Value = result xlw.Save xlw.Close Set xlo = Nothing Set xlw = Nothing End Sub