2013-04-22 53 views
1

我已经搜索了很多资源来尝试解决我的问题,但是我没有成功。我是VBA的初学者,所以我的代码很可能看起来非常混乱。为了提出这个问题,我会尽量保持工作表中的信息为最小值Excel VBA:错误处理仅适用于一次传递

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

DATA SHEET:
Property。 。 。 。数
1阿达圣
2阿达圣
3阿达圣
4阿达圣
5阿达圣
6阿达圣

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函数在那里,因为如果没有数字附加到地址,我希望单元格为空。我试图将其转换为错误处理程序的一部分,但它只是给了我一个错误。

有人请帮助我!如果您需要更多信息,我会很乐意提供。我会不断观看这个线索!

回答

1

在使用后的代码粘贴值的公式。

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

未经测试...

+0

这并没有完全奏效,但是我最终使用公式和此代码的组合。 我把公式放入单元格中,并在填充结果的按钮中添加“ActiveCell.Value = ActiveCell.Value”部分。这使我能够立即将细胞转换为它们的值而不是公式。 谢谢!我希望我能找到适当的解决方法。 我现在的问题是,当我点击我的清除按钮时,它不会将公式放回到这些单元格中。如果我要通过具有我的技能的代码来做到这一点,那么命名每一个单元格将是非常乏味的。 – 2013-04-22 14:14:33

+0

找到解决方案!谢谢你们 – 2013-04-22 14:33:46

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 
+0

我用公式做这件事并没有问题,但是我会用这些值做其他事情,并且需要用文本填充单元而不是公式。 – 2013-04-22 14:10:44

+0

@LukeBeacon,增加了函数的VBA形式 - '[]'用于快速和肮脏的'Range'引用,它们相当于'Range(“??”)' – SeanC 2013-04-22 14:28:51