运行时错误1004.需要从同一Excel文件中的另一个工作表中获取值

时间:2015-03-12 17:43:04

标签: excel vba excel-formula vlookup worksheet-function

Sub UpdateFormula()

    Dim CurrStr As String
    Dim EndRow As Long
    On Error GoTo 0

    EndRow = Range("A" & Rows.Count).End(xlUp).Row
    BaseStr = UCase(Range("A2").Value)

    Application.ScreenUpdating = False
    For iter = 4332 To EndRow
        CurrStr = UCase(Range("A" & iter).Value)
        result = Application.WorksheetFunction.VLookup(CurrStr, Sheets("CustAR").Range("A2:A2499"), 1, False)

        '=IF(ISERROR(VLOOKUP(A2, CustAR!$A$2:$A2499, 1, FALSE)),"NotFound",VLOOKUP(A2, CustAR!$A$2:$A2499, 1, FALSE))

    Next iter

    Application.ScreenUpdating = True

End Sub

上面的代码有什么问题?我在设置结果的行上收到错误。 错误是:

  

运行时错误1004:应用程序或对象定义错误

我要做的是在CustAR表格中寻找价值。 Excel文件有两个工作表,包括CustAR工作表。

“结果”旁边的行是在Excel中有效的公式。

4 个答案:

答案 0 :(得分:0)

我相信你要么没有标注result是什么。

OR

你有某种对象,因此行必须是:

Set result = Application...

答案 1 :(得分:0)

VLOOKUP正在搜索一个字符串,但似乎你没有提供一个字符串 - 所有数字也许?

答案 2 :(得分:0)

我很惊讶您收到了代码中的错误消息,因为我原以为它会返回:

Error Message

。但是,工作表公式的等效项可能如下所示:

result = Application.VLookup(CurrStr, Sheets("CustAR").Range("A2:A2499"), 1, False)
If IsError(result) Then result = "NotFound"

使用VLookup作为Application对象的属性,而不是作为Worksheetfunction对象的属性,导致result 包含错误代码(在本例中为错误2042)而不是导致VBA运行时错误。另一种方法是在原始代码中测试VBA运行时错误。

答案 3 :(得分:-1)

我修改了下面的代码并且它有效。 我删除了WorkSheetFunction并处理了结果值。

Sub UpdateFormula()

Dim CurrStr As String
Dim EndRow As Long
On Error GoTo 0

EndRow = Range("A" & Rows.Count).End(xlUp).Row
BaseStr = UCase(Range("A2").Value)

Application.ScreenUpdating = False
For iter = 4332 To EndRow

On Error Resume Next

    result = Application.VLookup(CLng(CurrStr), shAR.Range("A2:A2499"), 1, False) '.WorksheetFunction

    If result = "Error 2042" Then
        result = "NotFound"
    Else
        result = result
    End If

    Cells(iter, 2).Value = result
    On Error GoTo 0
    '=IF(ISERROR(VLOOKUP(A2, CustAR!$A$2:$A2499, 1, FALSE)),"NotFound",VLOOKUP(A2, CustAR!$A$2:$A2499, 1, FALSE))

Next iter

Application.ScreenUpdating = True

End Sub