我正在尝试使用vlookup函数来搜索单独工作簿中的多个工作表中的值。我试图使用vlookup的iferror函数,但我没有正确格式化它。
Sub CommandButton1_Click()
Dim item As String
item = 8
Dim brange, rbrange, jrange, cdrange, cprange As range
Set brange = Workbooks("Library_Database.xlsx")_
.Worksheets("BOOKS").range("A2:H51")
Set rbrange = Workbooks("Library_Database.xlsx")_
.Worksheets("REFERENCE BOOKS").range("A2:H51")
Set jrange = Workbooks("Library_Database.xlsx")_
.Worksheets("JOURNALS").range("A2:H51")
Set cdrange = Workbooks("Library_Database.xlsx")_
.Worksheets("CDS").range("A2:H51")
Set cprange = Workbooks("Library_Database.xlsx")_
.Worksheets("CONFERENCE PROCEEDINGS").range("A2:H51")
Dim title As String
title = IfError(VLookup(item, brange, 2, False), _
IfError(VLookup(item, rbrange, 2, False), _
IfError(VLookup(item, jrange, 2, False), _
IfError(VLookup(item, cdrange, 2, False), _
IfError(VLookup(item, cprange, 2, False), "")))))
End Sub
请帮忙!!!
试试这个。使用WorksheetFunction
时需要使用Iferror
,你需要使用Application.VLookup
(在这里阅读:http://dailydoseofexcel.com/archives/2004/09/24/the-worksheetfunction-method/)。
此外VBA VLookup
对数据类型很敏感,因此当你定义item as string
时它将无法工作。相反,你应该使用Variant
。
Dim item As Variant
您还需要将这些范围定义为Range
。使用当前代码,您只需将cprange
定义为实际范围。
请改用:Dim brange As Range, rbrange As Range, jrange As Range, cdrange As Range, cprange As Range
title = Application.WorksheetFunction.IfError(Application.VLookup(item, brange, 2, False), _
Application.WorksheetFunction.IfError(Application.VLookup(item, rbrange, 2, False), _
Application.WorksheetFunction.IfError(Application.VLookup(item, jrange, 2, False), _
Application.WorksheetFunction.IfError(Application.VLookup(item, cdrange, 2, False), _
Application.WorksheetFunction.IfError(Application.VLookup(item, cprange, 2, False), "")))))
一般来说,使用qazxsw poi是一种好习惯。将它放在模块的绝对第一行(程序外)。