我有一个数据库(表),需要将几个特定列复制到另一个工作表(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)))
对应的行中。所以,我可能以错误的方式引用数组的元素,或者只是写错了循环。
提前感谢您的帮助。
答案 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))