【问题标题】:Application defined or object defined error 1004 and Error 438 in using vlookup formula使用 vlookup 公式时应用程序定义或对象定义错误 1004 和错误 438
【发布时间】:2016-03-26 19:48:31
【问题描述】:

我正在尝试在一系列单元格上使用 vlookup 函数,以查找其他工作表中的值。但是,我不断收到运行时错误,提示“应用程序定义或对象定义错误”。

ActiveSheet.Range("$A$1", 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“对象不支持此属性或方法”

甚至尝试将 vlookup 编辑为此但再次收到 1004 错误:

Selection = Application.WorksheetFunction.VLookup("B2",Sheets(iCounter).Range(Cells(1, 1), Cells(nCols, nRows)), iColumn, False)

【问题讨论】:

    标签: excel runtime-error vlookup application-error vba


    【解决方案1】:

    尝试添加:

    On error resume next
    

    在脚本的顶部。如果 vlookup 没有找到匹配项,则会返回错误。

    如果它返回错误,您的脚本将停止。

    您当前和上一个提案本质上是相同的,但语法不同 - 但我认为这不是您的问题的原因。接下来尝试错误。

    【讨论】:

    • 如果 OP 打算将公式插入到一个范围内,在这里使用 Resume Next 实际上并不能解决问题...
    【解决方案2】:

    您似乎正试图将公式插入特定范围。 Application.WorksheetFunction.VLookup 不插入公式,它用于向您的子/函数返回一个值,就像普通函数一样。因此,如果目标是插入一堆公式,那么您的最佳示例是正确的方法。

    您在该行代码中看到错误的原因是您实际上并未引用范围。试试这个:

    Selection.Formula = "=vlookup(B2," & Sheets(icounter).Name & "!" & _
                            Selection.Address & "," & icolumn & ",false)"
    

    请注意,此代码调用工作表的名称,添加感叹号 (!),然后添加选择的地址。

    您可能还会看到错误,因为您的代码中缺少几个与号 (&)。

    最后,请注意不要使用.Select、.Selection和.Activate。它们在 VBA 中占有一席之地,但它们会给您带来很多麻烦。有关如何避免使用 .Select 的更多信息,请查看 Chris Neilsen 的 this answer 和 Siddharth Rout 的 this answer。

    【讨论】:

    • 非常感谢您的解决方案和解释,这段代码有效!
    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多