Excel VBA:错误处理仅适用于一次传递

时间:2013-04-22 12:51:52

标签: excel vba loops excel-vba error-handling

我搜索了许多来源以尝试解决我的问题,但是我没有成功。我是VBA的初学者,所以我的代码看起来非常混乱。为了提出问题,我会尽量将信息保存在表格中

我有两张纸,'数据'和'原始数字' 数据包含标题为“Property”和“Phone Number”的列,但只有“Property”中包含数据 原始数字包含相同的列,但它缺少一些“属性”值,因为它只包含与这些属性关联的特定数量的电话号码。

数据表:
财产。 。 。 。数
1 Ada St
2 Ada St
3 Ada St
4 Ada St
5 Ada St
6 Ada St

RAW NUMBERS SHEET:
财产。 。 。 。数
1 Ada St. 。 。 。 12345678个
2 Ada St. 。 。 。 12356322个
5 Ada St. 。 。 。 12551122个
6 Ada St. 。 。 。 12212112个

我有一个代码可以自动将数字导入数据表,但是一旦达到3 Ada St,它就会返回一个错误(400),因为原始数字上没有3个Ada St。我包含了一个错误处理程序,但它只能在再次返回错误之前工作一次 到目前为止,这是我的代码:

Sub Button_Click()
Worksheets("Data").Range("B4").Select  'B4 is the Number column in the data sheet
    Do While ActiveCell.Offset(0, -1) <> ""
    On Error GoTo ErrorHandler
                ActiveCell.Value = Application.WorksheetFunction.IfError(WorksheetFunction.VLookup(ActiveCell.Offset(0, -1), ThisWorkbook.Worksheets("Raw Numbers").Range("Numbers"), 2, False), "")

ErrorHandler:
                ActiveCell.Offset(1, 0).Select
   Loop

End Sub

我用这种方式编写代码是因为我最初使用的是函数而不是代码,但是这太混乱了。 IfError函数在那里,因为如果地址没有附加数字,我希望单元格为空。我尝试将其转换为错误处理程序的一部分,但它最终只是给了我一个错误。

有人请帮帮我!!如果您需要更多信息,我很乐意提供。我会不停地看这个帖子!

2 个答案:

答案 0 :(得分:1)

功能不应该太乱。 IFERRORVLOOKUP的组合应该有效。

公式看起来像这样:

=IFERROR(VLOOKUP(A2,RawData!A:B,2,FALSE),"")

在VBA中,我会编写类似这样的代码:

Option Explicit

Sub test()
Dim Result

On Error Resume Next
Result = Application.WorksheetFunction.VLookup([A3], [RawData!A:B], 2, False)
If Err.Number = 1004 Then ' data not found, or some other formula error
    Result = ""
Else
    MsgBox Err.Number & "-" & Err.Description
    Exit Sub
End If

[B3] = Result
End Sub

答案 1 :(得分:1)

在代码中使用公式并在之后粘贴值。

ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],Numbers,2,FALSE),"""")"
ActiveCell.Value = ActiveCell.Value

<强>未测试...