一个范围内的循环和参考数组元素excel宏

时间:2016-11-17 19:52:41

标签: arrays excel-vba loops macros range

我有一个数据库(表),需要将几个特定列复制到另一个工作表(sheet3)。此外,每列应粘贴在sheet3的特定列中。为此,我创建了两个arrrays:arrSht包含要复制的列的标题,Arrcol包含引用列的数字。

然后,我尝试遍历两个数组的每个元素以找到列,复制并粘贴它。我的尝试如下:

Sub copia()

Dim f As Range
Dim arrSht, Arrcol As Variant, j As Long

arrSht = Array("a","b","c")
Arrcol = Array(5, 6, 8)

For j = LBound(arrSht) To UBound(arrSht)    

Set f = Sheet1.Cells.Find(arrSht(j), searchorder:=xlByRows, LookAt:=xlPart) 

 If Not f Is Nothing Then
 Sheet1.Range(f, Sheet1.Cells(Rows.Count, f.Column).End(xlUp)).Copy _
             Sheet3.Range(Sheet3.Cells(2, Arrcol(j)))
 Else
 MsgBox arrSht(j) & "Header not found!"
 End If
Next j
end sub

为了澄清,循环的第一次迭代应该找到其标题为" a" (arrSht的第一个元素)并将其存储在f中。然后,复制f对应的列。最后将其粘贴到Sheet3第5列(即Arrcol的第一个元素)

当我运行代码时,我收到错误:"方法'范围'对象' _worksheet'失败"在与Sheet1.Range(f, Sheet1.Cells(Rows.Count, f.Column).End(xlUp)).Copy _ Sheet3.Range(Sheet3.Cells(2, Arrcol(j)))对应的行中。所以,我可能以错误的方式引用数组的元素,或者只是写错了循环。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在此代码中......

Sheet3.Range(Sheet3.Cells(2, Arrcol(j)))

... Sheet3.Cells(2, Arrcol(j))正在返回Range。然后,您将其作为参数传递给Sheet3.Range

由于您只关心1个单元格,因此请跳过.Range来电并使用.Cells

Sheet3.Cells(2, Arrcol(j))