2011-08-17 298 views
0

在包含訂單的Excel電子表格中,我的VBA代碼出現問題。每行都包含一個客戶編號,用於查找工作簿中不同工作表中包含的客戶電子郵件地址。VBA Excel vlookup循環問題

對於單個單元格,vlookup代碼工作正常,但問題是當我嘗試遍歷電子表格的所有行時。 Excel公式用於單個細胞是,例如,

=VLOOKUP(B2,Customers!A2:D1000,4,FALSE) 

此生成的VBA代碼是:

Range("M2").Select 
ActiveCell.FormulaR1C1 = _ 
    "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)" 

併入的環路這一點,選擇所述起始細胞後,我有以下:

Cells(2, 13).Select 
Do 
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)" 
    ActiveCell.Offset(1, 0).Select 
Loop Until IsEmpty(ActiveCell.Offset(0, -10))  

的問題是,我想要的「表陣列」是固定,而不是相對於其值正在被查找的細胞。但我絕對不知道如何去做。如果我更改代碼如下,我得到一個運行時錯誤:

ActiveCell.FormulaR1C1 = _ 
    "=VLOOKUP(RC[-11],Customers!A2:D1000,4,FALSE)" 

我已經試過報價,unquoting,設置了一系列變量,使用範圍變量,。地址...可有人幫幫我?

非常感謝。

回答

0

我很確定你的R1C1公式中的方括號表明你正在指定一個相對範圍(特別是在它們的負值範圍內)。如果要指定絕對範圍,則需要指定R1C1單元格而不包含括號;例如R2C2:R4C4。

舉個簡單的例子:

Sub test() 
    Sheet1.Range("C5").FormulaR1C1 = "=VLOOKUP(1,R1C1:R3C3,2,FALSE)" 
End Sub 

運行這給你一個絕對的 「A1」 式在C5單元格公式。

我認爲你的問題可能是:

Customers!RC[-12]:R[999]C[-9] 

因爲它是一個相對的範圍。您必須明確指定數據表的位置;例如Customers!RC12:R999C9(你需要找出它在你的工作表上的位置)。

解決這個問題的簡單方法是在工作表上突出顯示數據表,然後切換到Visual Basic編輯器並手動運行(將光標置於Sub內,然後按'播放'按鈕或轉到運行 - >運行)。

Sub test2() 
    Dim r As Range 
    Set r = Application.Selection 
    InputBox "your r1c1 range:", , r.Address(True, True, xlR1C1) 
End Sub 
+0

你是對的,參考文獻確實是相對的,我一直在努力弄清楚如何指定絕對範圍。感謝您的評論,我會嘗試一下,讓你知道它是如何發生的。 – carol

+0

竅門!我不能夠感謝你。 :) – carol

+0

很高興聽到它! – transistor1