VBA中的Excel 2016 Vlookup函数

我需要一些Excel的Vlookup函数的帮助。 我有2个工作表。 首先有一个公司代码,第二我需要find基于公司代码的值。 相关的代码是:

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) 

我试图修改每个variables和Vlookup函数本身的Dim,但是我总是得到相同的错误信息:

运行时错误“438”:对象不支持此属性或方法

问题可能在很多地方。 无论如何,显然,VLOOKUP对数字和string有点挑剔,因此Compcode应该是Variant

像这样的东西可以解决:

 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 

你应该明确地声明每个variables,这不是c++/c用逗号声明它们,并希望VBEditor能理解。

我也改变了公式范围。

WorksheetFunction.Vlookup对input非常不稳定,并且可以很容易地抛出运行时错误。

你的问题可能是许多事情之一,但我build议的解决scheme将是使用Find而不是:

 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