2016-10-20 62 views
0

我有,我想複製並投入包含此宏新工作簿中的多個列中的數據兩個工作簿。基本上我希望能夠打開當前工作簿「z」,運行宏並將數據從其他兩個現有工作簿移動/複製。Excel的VBA - 複製多個列從2個到工作簿簿1

我一直在這裏尋找身邊,看着來自不同崗位不同的想法,並認爲我已經非常想通了這一點,但我跑成「運行時錯誤1004」當我運行這段代碼。該錯誤發生在第一個y.Range線,我還沒有找出原因。

我已經成功地能夠從「X」工作簿中提取數據,而不是「Y」。

我是新來的VBA所以任何幫助將不勝感激。

感謝,

Sub SellPrice() 

Dim x As Worksheet, y As Worksheet, z As Worksheet, LastRow& 

Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\PRODUCT.XLS") 
Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\GrossProfit.xls") 

Set x = Workbooks("PRODUCT.XLS").Worksheets("ProductFile") 
Set y = Workbooks("GrossProfit.xls").Worksheets("Sellprice") 
Set z = Workbooks("SellPriceMacro.xlsm").Worksheets("Sheet1") 

LastRow = x.Cells.SpecialCells(xlCellTypeLastCell).Row 

x.Range("B4:B" & LastRow).Copy z.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
x.Range("C4:C" & LastRow).Copy z.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0) 
x.Range("K4:K" & LastRow).Copy z.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0) 

LastRow = y.Cells.SpecialCells(xlCellTypeLastCell).Row 

y.Range("B2:B" & LastRow).Copy z.Cells(Rows.Count, "E").End(x1Up).Offset(1, 0) 
y.Range("C2:C" & LastRow).Copy z.Cells(Rows.Count, "F").End(x1Up).Offset(1, 0) 
y.Range("D2:D" & LastRow).Copy z.Cells(Rows.Count, "G").End(x1Up).Offset(1, 0) 
y.Range("H2:H" & LastRow).Copy z.Cells(Rows.Count, "H").End(x1Up).Offset(1, 0) 

Application.CutCopyMode = False 

End Sub 

回答

0

看你怎麼把工作表中使用Range()過嗎? (y.Range(...)) - 你需要做的,任何時候你用Cells()Rows.CountColumns.Count(和其他範圍)。否則,它會查看ActiveSheet是什麼,並使用它。當您將活動表單與活動表單混合在一起時,您會看到一個錯誤。

Sub SellPrice() 

Dim x As Worksheet, y As Worksheet, z As Worksheet, LastRow& 

Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\PRODUCT.XLS") 
Workbooks.Open ("C:\Users\tsmith\Desktop\SellPrice\GrossProfit.xls") 

Set x = Workbooks("PRODUCT.XLS").Worksheets("ProductFile") 
Set y = Workbooks("GrossProfit.xls").Worksheets("Sellprice") 
Set z = Workbooks("SellPriceMacro.xlsm").Worksheets("Sheet1") 

LastRow = x.Cells.SpecialCells(xlCellTypeLastCell).Row 

x.Range("B4:B" & LastRow).Copy z.Cells(z.Rows.Count, "A").End(xlUp).Offset(1, 0) 
x.Range("C4:C" & LastRow).Copy z.Cells(z.Rows.Count, "B").End(xlUp).Offset(1, 0) 
x.Range("K4:K" & LastRow).Copy z.Cells(z.Rows.Count, "C").End(xlUp).Offset(1, 0) 

LastRow = y.Cells.SpecialCells(xlCellTypeLastCell).Row 

y.Range("B2:B" & LastRow).Copy z.Cells(z.Rows.Count, "E").End(xlUp).Offset(1, 0) 
y.Range("C2:C" & LastRow).Copy z.Cells(z.Rows.Count, "F").End(xlUp).Offset(1, 0) 
y.Range("D2:D" & LastRow).Copy z.Cells(z.Rows.Count, "G").End(xlUp).Offset(1, 0) 
y.Range("H2:H" & LastRow).Copy z.Cells(z.Rows.Count, "H").End(xlUp).Offset(1, 0) 

Application.CutCopyMode = False 

End Sub 
+0

除非我正確讀您的回覆,該代碼應工作,因爲我把工作簿範圍之前,'y.Range' –

+0

這能清理擺脫'Cells','排。伯爵,等等?我甚至嘗試運行刪除所有工作簿「x」行,但它仍然出現相同的錯誤。我在想可能是Workbook「y」? –

+0

@ T.Smith它只是複製/粘貼到SO,還是你的代碼也有'.END(X1UP)'...請注意,這是一個'1'而不是'l'。 – BruceWayne

相關問題