在我尝试修复此代码时,我遇到了另一个问题。在这行代码中,
If Not (IsError(Application.WorksheetFunction.VLookup(item, lookup_range, 2, False))) Then
我收到错误无法获取工作表函数类的#vingup属性"
整个代码如下。谢谢你的帮助!
Sub code()
Columns("E:G").Insert shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
Range("E6").value = "Drink Price"
Range("F6").value = "Drink Revenue"
Range("G6").value = "Gross Sales less Drink Revenue"
Dim i As Variant
Dim item As Variant
Dim lookup_range As Range
Dim rev_wksht As Worksheet
Dim rev_wbk As Workbook
Dim vlkup_wbk As Workbook
Set rev_wksht = ActiveWorkbook.Sheets(1)
Set vlkup_wbk = Workbooks.Open("C:\Users\user\Documents\vlookup table drink prices.xlsx")
Set lookup_range = vlkup_wbk.Worksheets("Sheet1").Range("A:B")
i = 7
Do While rev_wksht.Cells(i, 1).value <> ""
Set item = rev_wbk.Sheets(1).Cells(i, 1).value
If Not (IsError(Application.WorksheetFunction.VLookup(item, lookup_range, 2, False))) Then
rev_wksht.Cells(i, 5).value = Application.WorksheetFunction.VLookup(item, lookup_range, 2, False)
rev_wksht.Cells(i, 6).Formula = rev_wksht.Cells(i, 11).value * rev_wksht.Cells(i, 5).value
rev_wksht.Cells(i, 7).Formula = rev_wksht.Cells(i, 4).value - rev_wksht.Cells(i, 6).value
ElseIf (IsError(Application.WorksheetFunction.VLookup(item, lookup_range, 2, False))) Then
rev_wksht.Cells(i, 5).value = Empty
End If
i = i + 1
Loop
rev_wksht.Range("F:G").NumberFormat = "#,##0.00"
rev_wksht.Cells.EntireColumn.AutoFit
End Sub
答案 0 :(得分:2)
您的问题是您尚未设置rev_wbk。
答案 1 :(得分:2)
您已声明Dim rev_wbk As Workbook
但尚未对其进行初始化,因此您收到错误
答案 2 :(得分:1)
我收到错误&#34;运行时错误91,对象变量或未设置块变量&#34;但是当我指定项目的值时,我已经设置了。我尝试过没有套装......
Set
关键字仅用于将分配给对象类型。 item
是Variant
,虽然它可以是一个对象,但Range.Value
不是对象类型,它是字符串,数字或错误类型,并且会被指定为:< / p>
item = ...
实际运行时91错误意味着您正在引用尚未分配对象实例的对象变量。查看您的代码:您不会Set rev_wbk ...
任何现有的Workbook
,所以当您将其声明为Workbook
对象时,它现在是Nothing
,如果不提出91错误,您就无法Nothing.Method
或Nothing.Property
:)
答案 3 :(得分:0)
您需要使用Application.Vlookup
我不是100%确定application.worksheetfunction.vlookup停止工作的原因,但它曾经与application.vlookup截然不同,因为如果发生错误它会返回不同的错误对象。
自2007年办公室以来的某个时候,它似乎已被删除,但智能感知一直停留在那里。