使用 vlookup 公式时应用程序定义或对象定义错误 1004 和错误 438
Application defined or object defined error 1004 and Error 438 in using vlookup formula
我正在尝试对一系列单元格使用 vlookup 函数,该函数在其他工作表中查找值。但是我不断收到一个运行时错误,上面写着 "application defined or object defined error."
ActiveSheet.Range("$A", Selection.End(xlDown)).RemoveDuplicates Columns:=1, _
Header:=xlYes
'In Summary Tab
Range("A1").CurrentRegion.Select
nRows = Selection.Rows.Count
' Places column headers in "Summary" tab
For iCounter = 2 To Sheets.Count
Sheets(iCounter).Select
Range("A1").CurrentRegion.Select
nCols = Selection.Columns.Count
For iColumn = 2 To nCols
Sheets(iCounter).Select
If (WorksheetFunction.IsNumber(Cells(2, iColumn)) = "TRUE") Then
Cells(1, iColumn).Select
Selection.Copy
Sheets("Summary").Select
ActiveCell.Offset(0, 1).PasteSpecial
Application.CutCopyMode = False
ActiveCell.Offset(1, 0).Select
ActiveCell.Resize(nRows - 1, 1).Select
Selection.Formula = "=vlookup(B2," & _
Range(sheets(icounter).selection).Address","& icolumn",false)"
End If
Next
Next
我也试过为此编辑 vlookup 公式,(其他一切都一样):
Selection = Application.WorksheetFunction.VLookup( _
"B2", Sheets(iCounter).CurrentRegion.Select, iColumn, False)
但是这给出了错误 438 "object doesn't support this property or method"
甚至尝试将 vlookup 编辑为此,但再次出现 1004 错误:
选择 = Application.WorksheetFunction.VLookup("B2",Sheets(iCounter).Range(Cells(1, 1), Cells(nCols, nRows)), iColumn, False)
尝试添加:
On error resume next
在脚本的顶部。如果 vlookup 没有找到匹配项,它将 return 出错。
如果它 return 是一个错误,您的脚本将停止。
您当前和上次的提案本质上是相同的,只是语法不同 - 但我认为这不是您问题的原因。尝试下一个错误。
您似乎在尝试将公式插入特定范围。 Application.WorksheetFunction.VLookup
不插入公式,它用于 return 您的 sub/function 的值,就像普通函数所做的那样。因此,如果目标是插入一堆公式,那么您的最佳示例是正确的方法。
您在该行代码中看到错误的原因是您实际上并未引用范围。试试这个:
Selection.Formula = "=vlookup(B2," & Sheets(icounter).Name & "!" & _
Selection.Address & "," & icolumn & ",false)"
注意这段代码调出sheet的名称,加上感叹号(!
),然后加上选区的地址。
您可能还遇到了错误,因为您在代码中遗漏了几个与号 (&
)。
最后,请注意使用.Select
、.Selection
和.Activate
。它们在 VBA 中占有一席之地,但它们会给您带来很多麻烦。有关如何避免使用 .Select
的更多信息,请查看 Siddharth Rout 的 this answer by Chris Neilsen and this answer。
我正在尝试对一系列单元格使用 vlookup 函数,该函数在其他工作表中查找值。但是我不断收到一个运行时错误,上面写着 "application defined or object defined error."
ActiveSheet.Range("$A", Selection.End(xlDown)).RemoveDuplicates Columns:=1, _
Header:=xlYes
'In Summary Tab
Range("A1").CurrentRegion.Select
nRows = Selection.Rows.Count
' Places column headers in "Summary" tab
For iCounter = 2 To Sheets.Count
Sheets(iCounter).Select
Range("A1").CurrentRegion.Select
nCols = Selection.Columns.Count
For iColumn = 2 To nCols
Sheets(iCounter).Select
If (WorksheetFunction.IsNumber(Cells(2, iColumn)) = "TRUE") Then
Cells(1, iColumn).Select
Selection.Copy
Sheets("Summary").Select
ActiveCell.Offset(0, 1).PasteSpecial
Application.CutCopyMode = False
ActiveCell.Offset(1, 0).Select
ActiveCell.Resize(nRows - 1, 1).Select
Selection.Formula = "=vlookup(B2," & _
Range(sheets(icounter).selection).Address","& icolumn",false)"
End If
Next
Next
我也试过为此编辑 vlookup 公式,(其他一切都一样):
Selection = Application.WorksheetFunction.VLookup( _
"B2", Sheets(iCounter).CurrentRegion.Select, iColumn, False)
但是这给出了错误 438 "object doesn't support this property or method"
甚至尝试将 vlookup 编辑为此,但再次出现 1004 错误:
选择 = Application.WorksheetFunction.VLookup("B2",Sheets(iCounter).Range(Cells(1, 1), Cells(nCols, nRows)), iColumn, False)
尝试添加:
On error resume next
在脚本的顶部。如果 vlookup 没有找到匹配项,它将 return 出错。
如果它 return 是一个错误,您的脚本将停止。
您当前和上次的提案本质上是相同的,只是语法不同 - 但我认为这不是您问题的原因。尝试下一个错误。
您似乎在尝试将公式插入特定范围。 Application.WorksheetFunction.VLookup
不插入公式,它用于 return 您的 sub/function 的值,就像普通函数所做的那样。因此,如果目标是插入一堆公式,那么您的最佳示例是正确的方法。
您在该行代码中看到错误的原因是您实际上并未引用范围。试试这个:
Selection.Formula = "=vlookup(B2," & Sheets(icounter).Name & "!" & _
Selection.Address & "," & icolumn & ",false)"
注意这段代码调出sheet的名称,加上感叹号(!
),然后加上选区的地址。
您可能还遇到了错误,因为您在代码中遗漏了几个与号 (&
)。
最后,请注意使用.Select
、.Selection
和.Activate
。它们在 VBA 中占有一席之地,但它们会给您带来很多麻烦。有关如何避免使用 .Select
的更多信息,请查看 Siddharth Rout 的 this answer by Chris Neilsen and this answer。