2016-11-17 68 views
0

我有一個數據庫(表),並需要將幾個特定的​​列複製到另一個工作表(sheet3)。另外,每列應粘貼在sheet3的特定列中。爲此,我創建了兩個數組:arrSht包含要複製的列的標題,Arrcol包含引用列的數字。循環和引用數組元素在一個範圍內的excel宏

然後,我嘗試遍歷兩個數組的每個元素來查找列,複製並粘貼它。我嘗試去如下:

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第一個元素)

當我運行的代碼中,我得到的錯誤:在對應於Sheet1.Range(f, Sheet1.Cells(Rows.Count, f.Column).End(xlUp)).Copy _ Sheet3.Range(Sheet3.Cells(2, Arrcol(j)))行「方法‘範圍’對象的‘_Worksheet’失敗」。所以,我可能以錯誤的方式引用了數組的元素,或者只是寫了一個錯誤的循環。

非常感謝您的幫助。

+0

不知道,但嘗試更改爲'Sheet1.Range(F,Sheet1.Cells(Rows.Count,F .Column).End(xlUp))。Copy _ Sheet3.Cells(2,Arrcol(j))' – SJR

回答

0

在此代碼...

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

... Sheet3.Cells(2, Arrcol(j))返回一個Range。然後你將它作爲參數傳遞給Sheet3.Range

既然你只在乎1細胞,跳過.Range呼叫,只需使用.Cells

Sheet3.Cells(2, Arrcol(j))