运行时错误 1004。需要从同一 Excel 文件中的另一个 sheet 获取值
Runtime error 1004. Need to fetch value from another sheet in same Excel file
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:$A2499, 1, FALSE)),"NotFound",VLOOKUP(A2, CustAR!$A:$A2499, 1, FALSE))
Next iter
Application.ScreenUpdating = True
End Sub
上面的代码有什么问题?我在设置结果的行上出错。
错误是:
Runtime error 1004 : Application or object defined error
我想做的是在 CustAR
sheet 中寻找价值。 Excel 文件有两个作品 sheet,包括 CustAR
sheet。
"result" 旁边的行是适用于 Excel 的公式。
我相信你要么没有确定 result
是什么。
或
你有但作为某种对象,因此该行需要是:
Set result = Application...
VLOOKUP 正在搜索一个字符串,但您似乎没有提供可找到的字符串 - 也许是所有数字?
我很惊讶你在代码中收到了错误消息,正如我所想的那样 return:
。但是,您的工作表公式的等效项可能如下所示:
result = Application.VLookup(CurrStr, Sheets("CustAR").Range("A2:A2499"), 1, False)
If IsError(result) Then result = "NotFound"
将 VLookup 用作 Application 对象的 属性,而不是用作 Worksheetfunction 对象的 属性,导致 result
包含 错误代码(在本例中为错误 2042),而不是导致 VBA run-time 错误。另一种方法是测试原始代码中的 VBA 运行时错误。
我修改了下面的代码并且它起作用了。
我删除了 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
错误继续下一步
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:$A2499, 1, FALSE)),"NotFound",VLOOKUP(A2, CustAR!$A:$A2499, 1, FALSE))
Next iter
Application.ScreenUpdating = True
结束子
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:$A2499, 1, FALSE)),"NotFound",VLOOKUP(A2, CustAR!$A:$A2499, 1, FALSE))
Next iter
Application.ScreenUpdating = True
End Sub
上面的代码有什么问题?我在设置结果的行上出错。 错误是:
Runtime error 1004 : Application or object defined error
我想做的是在 CustAR
sheet 中寻找价值。 Excel 文件有两个作品 sheet,包括 CustAR
sheet。
"result" 旁边的行是适用于 Excel 的公式。
我相信你要么没有确定 result
是什么。
或
你有但作为某种对象,因此该行需要是:
Set result = Application...
VLOOKUP 正在搜索一个字符串,但您似乎没有提供可找到的字符串 - 也许是所有数字?
我很惊讶你在代码中收到了错误消息,正如我所想的那样 return:
。但是,您的工作表公式的等效项可能如下所示:
result = Application.VLookup(CurrStr, Sheets("CustAR").Range("A2:A2499"), 1, False)
If IsError(result) Then result = "NotFound"
将 VLookup 用作 Application 对象的 属性,而不是用作 Worksheetfunction 对象的 属性,导致 result
包含 错误代码(在本例中为错误 2042),而不是导致 VBA run-time 错误。另一种方法是测试原始代码中的 VBA 运行时错误。
我修改了下面的代码并且它起作用了。 我删除了 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
错误继续下一步
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:$A2499, 1, FALSE)),"NotFound",VLOOKUP(A2, CustAR!$A:$A2499, 1, FALSE))
Next iter
Application.ScreenUpdating = True
结束子