我正在解决一个问题,要遍历一定数量的列并粘贴到数组公式中。对于每个新列,我必须更改公式以反映该列地址。但是,当我尝试现在运行它时,我不断得到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 :(得分: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%的时间内vba不需要.Select
任何内容 - 您可以直接访问对象的属性和方法而无需制作它是Selection
答案 1 :(得分:0)
从我看到的情况来看,您可能正在选择表格和数据验证的列。而活动表是另一个工作表。
您需要先激活数据验证表,这意味着您要添加一行
ThisWorkbook.Sheets("Data Validation").Select
行前
ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").Select
如果您不再需要运行使用当前活动表的代码,则可以使用此功能。