1

我已经搜索了许多资源来尝试解决我的问题,但是我没有成功。我是 VBA 的初学者,所以我的代码很可能看起来很混乱。为了提出这个问题,我会尽量减少表格中的信息

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

数据表:
财产。. . . 1号
艾达街
2 艾达街
3 艾达街
4 艾达街
5 艾达街
6 艾达街

原始数字表:
财产。. . . 1号
艾达街。. . . 12345678
2 艾达街。. . . 12356322
5 艾达街。. . . 12551122
6 艾达街。. . . 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 函数在那里,因为如果地址没有附加数字,我希望单元格为空白。我尝试将其转换为错误处理程序的一部分,但它最终给了我一个错误。

有人请帮助我!如果您需要更多信息,我很乐意提供。我会一直关注这个话题!

4

2 回答 2

1

功能不应该太杂乱。IFERROR和的组合VLOOKUP应该起作用。

公式看起来像这样:

=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
于 2013-04-22T13:17:16.583 回答
1

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

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

未经测试...

于 2013-04-22T13:27:02.327 回答