2013-04-22 84 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