Función de Excel 2016 Vlookup en VBA

Necesito ayuda con la function Vlookup de Excel. Tengo 2 hojas de trabajo. En el primero, hay un Código de empresa; en el segundo, necesito encontrar valores basados ​​en el código de la compañía. El código relevante es:

Dim Compcode, AUC, OB As String Dim WS1, WS2 As Worksheet Set WS1 = ThisWorkbook.Worksheets("Main Sheet") Set WS2 = ThisWorkbook.Worksheets("Data") Compcode = WS1.Cells(2, 1).Value 'Company code WS1 A2 AUC = Application.WorksheetFunction.VLookup(Compcode, WS2.Range("A2:C30"), 2, False) OB = Application.WorksheetFunction.VLookup(Compcode, WS2.Range("A2:C30"), 3, False) 

Intenté modificar el Dim para cada una de las variables y la function Vlookup, pero siempre obtengo el mismo post de error:

Error '438' en time de ejecución: el object no admite esta propiedad o método

El problema puede ser en muchos lugares. De todos modos, obviamente, VLOOKUP es un poco exigente con los numbers y las cadenas, por lo tanto, el Compcode debe ser una Variant

Algo así podría funcionar:

 Option Explicit Public Sub TestMe() Dim Compcode As Variant Dim AUC As String Dim OB As String Dim WS1 As Worksheet Dim WS2 As Worksheet Set WS1 = ThisWorkbook.Worksheets("Main Sheet") Set WS2 = ThisWorkbook.Worksheets("Data") Compcode = WS1.Cells(2, 1).Value Dim rngRange As Range Set rngRange = WS2.Range("A2:C30") AUC = Application.WorksheetFunction.VLookup(Compcode, rngRange, 2, False) OB = Application.WorksheetFunction.VLookup(Compcode, rngRange, 3, False) End Sub 

Debes declarar explícitamente cada variable, esto no es c++/c para declararlas con una coma y esperar que el VBEditor lo entienda.

También he cambiado la fórmula a un range.

WorksheetFunction.Vlookup es muy volátil a las inputs y puede arrojar fácilmente errores de time de ejecución, como te has encontrado.

Su problema podría ser una de varias cosas, pero mi solución sugerida sería usar Find lugar:

 Sub test() Dim Compcode As Variant, AUC As Variant, OB As Variant Dim WS1 As Worksheet, WS2 As Worksheet Set WS1 = ThisWorkbook.Worksheets("Main Sheet") Set WS2 = ThisWorkbook.Worksheets("Data") Compcode = WS1.Cells(2, 1).Value 'Company code WS1 A2 Dim rng As Range Set rng = WS2.Range("A2:C30").Find(Compcode, , , xlWhole) If Not rng Is Nothing Then AUC = rng.Offset(0, 1).Value OB = rng.Offset(0, 2).Value End If End Sub