2015-10-05 105 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