2015-10-05 85 views
1

我上的問題與循環工作通過一定數目的列和陣列式中粘貼。對於每一個新列,我都必須更改公式以反映該列地址。但是,當我嘗試運行它時,我一直得到1004(範圍類失敗的選擇方法)錯誤。以下是我已經寫了:遍歷列和粘貼的陣列式

Sub Testlee() 
Dim i As Integer 
Dim LastColumn As Long 
Dim rng As Range 
Dim colStr As String 

LastColumn = 10 
For i = 1 To LastColumn 
colStr = Replace(Split(Columns(i).Address, ":")(0), "$", "") 
ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").Select 
Selection.FormulaArray = "=IF(LEN(Agent1!" & colStr & "2:" & colStr & "500) + LEN(Agent2!" & colStr & "2:" & colStr & "500) = 0,"""",(IF(Agent1!" & colStr & "2:" & colStr & "500=Agent2!" & colStr & "2:" & colStr & "500, ""YES"", Agent1!" & colStr & "2:" & colStr & "500&""||""&Agent2!" & colStr & "2:" & colStr & "500)))" 

Next i 

End Sub 

任何幫助,將不勝感激:)

更新:我能得到它的工作使用兩種方法的結合。以下是可用的代碼:

For i = 1 To LastColumn 
colStr = Replace(Split(Columns(i).Address, ":")(0), "$", "") 
    With ThisWorkbook.Sheets("Data Validation").Range("A2:A500") 
     ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").FormulaArray = "=IF(LEN(Agent1!RC:R[498]C)+LEN(Agent2!RC:R[498]C) = 0,"""",(IF(Agent1!RC:R[498]C=Agent2!RC:R[498]C, ""YES"", Agent1!RC:R[498]C&""||""&Agent2!RC:R[498]C)))" 
    End With 
Next i 

感謝大家的幫助!

+0

你用R1C1參考風格? – psychicebola

+0

您只能在活動工作表中選擇單元格。你不需要選擇在所有[鏈接](http://stackoverflow.com/questions/10714251) – BrakNicku

+0

BrakNicku嗨,我試着不使用選擇,只是這樣做有它的表(範圍).FormulaArray =「公式」但它也沒有效果。 – NLourme

回答

0

從我所看到的,你可能會選擇表「數據有效性」的列,而活性紙是另一個工作表。

您需要先激活數據驗證表

ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").Select 

這是提供這意味着你前行添加一行

ThisWorkbook.Sheets("Data Validation").Select 

你不需要跑了代碼使用當前活動頁。

1

試試這個:

Sub MM() 

Const LastCol As Integer = 10 '// Column number to extend to 

With Sheets("Data Validation").Range("A2:A500") 
    .Resize(500, LastCol).FormulaArray = "=IF(LEN(Agent1!RC:R[498]C)+LEN(Agent2!RC:R[498]C) = 0,"""",(IF(Agent1!RC:R[498]C=Agent2!RC:R[498]C, ""YES"", Agent1!RC:R[498]C&""||""&Agent2!RC:R[498]C)))" 
End With 

End Sub 
  • 使用R1C1 Notation,以制相關的每個單元不用循環。

  • 此外,您可以使用Resize()方法調整大小一個現有的範圍 - 再次保存循環。 Info on Resize method here

  • 最後,前面已經提到 - 的99.99%的時間是沒有必要.Select任何東西 - 你可以直接訪問對象的屬性和方法,而不使其成爲Selection

+0

嗨@Macro Man,感謝您的建議!我認爲你是正確的,我需要使用R1C1,但是當我實現它以這樣的方式。 牀單(「數據有效性」)範圍(「A2:A500」) .Resize(500,LASTCOL)。 (代理1!RC:R C)+ LEN(代理2!RC:R)= 0,「」「」,(IF(代理1!RC: C = Agent2 RC:! - [R [498] C 「」 YES 「」,劑1 RC:! - [R [498] C& 「」 || 「」 &Agent2 RC:R 498] C)))」 然後我最後得到一系列完全相同公式的A500:J範圍(在這種情況下,R1C1評估爲A2:A500)。它似乎並沒有根據專欄改變。 – NLourme

+0

好的,看看上面的編輯是否有效。 –

+0

Hi @Macro Man我放入R1C1,它仍然只在A2:J500範圍內的同一個公式中複製。 – NLourme