2011-09-20 38 views
0

我看不到的地方我已經錯了Excel 2010中VBA - 運行時錯誤1004 - 使用比賽從一個工作表複製至另一

Dim Sheet1RowNumber As Variant, Sheet28RowNumber As Variant, sStaffName As String 
sStaffName = Worksheets(1).Cells(7, 1).Value 
Sheet28RowNumber = Application.Match(sStaffName, Worksheets(28).Range("a:a"), 0) 
Sheet1RowNumber = Application.Match(sStaffName, Worksheets(1).Range("a:a"), 0) 
Worksheets(1).Range(Cells(Sheet1RowNumber, 2), Cells(Sheet1RowNumber, 8)) =  Worksheets(28).Range(Cells(Sheet28RowNumber, 2), Cells(Sheet28RowNumber, 8)) 

回答

2

VBA不喜歡它,當你的參考多 - 單元格範圍從當前未選中/激活的工作表。 (奇怪的是,這對單細胞範圍來說不是問題......)無論如何,這就是在這種情況下造成你的錯誤的原因。該語句是指多小區範圍上的兩個不同表:

Worksheets(1).Range(Cells(Sheet1RowNumber, 2), Cells(Sheet1RowNumber, 8)) = _ 
    Worksheets(28).Range(Cells(Sheet28RowNumber, 2), Cells(Sheet28RowNumber, 8)) 

可以通過存儲範圍在緩衝器(下面temp)要複製其分解成兩行。在每個聲明之前,激活適當的工作表。此作品:

Dim Sheet1RowNumber As Variant, Sheet28RowNumber As Variant, sStaffName As String 
Dim temp As Variant 

sStaffName = Worksheets(1).Cells(7, 1).Value 
Sheet28RowNumber = Application.Match(sStaffName, Worksheets(2).Range("a:a"), 0) 
Sheet1RowNumber = Application.Match(sStaffName, Worksheets(1).Range("a:a"), 0) 

Worksheets(2).Activate 
temp = Worksheets(2).Range(Cells(Sheet28RowNumber, 2), Cells(Sheet28RowNumber, 8)) 
Worksheets(1).Activate 
Worksheets(1).Range(Cells(Sheet1RowNumber, 2), Cells(Sheet1RowNumber, 8)) = temp 
相關問題