2013-07-18 46 views
6

我試圖將一個數據從一個工作簿移動到另一個工作簿,方法是將一個範圍的值分配給另一個。當我使用正常的Range語法來指定目標範圍(Range(「A1:B2」))時,我的代碼可以工作,但是如果我嘗試使用Range,Cells語法(Range(Cells(1,1),Cells ,2)))我的代碼不起作用。爲什麼Range工作,但不是單元格?

我激活目標工作簿(ActiveWorkbook),並且具有在源工作簿(的ThisWorkbook)上運行的代碼。

此代碼:

ActiveWorkbook.Worksheets(1).Range("A1:B2").Value _ 
= ThisWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value 

但是這個代碼不:

ActiveWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value _ 
= ThisWorkbook.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value 

我得到的錯誤是運行時錯誤「1004」:一個應用定義或對象定義的錯誤。

有誰知道爲什麼使用單元格對象造成我的問題,或者如果有一些其他問題,我不知道?

回答

21

的問題是,Cells不合格,這意味着片到那些細胞是指根據在您的代碼是不同的。

  • 在紙張的類模塊:返回一個Range對象,你不指定它是在這片你打電話RangeCellsRowsUsedRange或任何東西任何時候,在片被根據分配了片不管什麼積極
  • 在任何其他模塊:該ActiveSheet

你有資格的Range參考,但Cells引用是不合格的,並可能指向Activesheet。這就像寫

ThisWorkbook.Worksheets(1).Range(ActiveSheet.Cells(1, 1), ActiveSheetCells(2, 2)).Value 

這當然沒有任何意義,除非ThisWorkbook.Worksheets(1)恰好是積極的。我經常喜歡使用With塊,以確保一切都完全合格。

With Sheets(1) 
    .Range(.Cells(1,1), .Cells(2,2)).Value = "something" 
End With 

但你指的是兩個不同的表,所以你會使用短表的變量,比如會更好:

Dim shSource As Worksheet 
Dim shDest As Worksheet 

Set shSource = ThisWorkbook.Worksheets(1) 
Set shDest = Workbooks("myBook").Worksheets(1) 

shDest.Range(shDest.Cells(1, 1), shDest.Cells(2, 2)).Value = _ 
    shSource.Range(shSource.Cells(1, 1), shSource.Cells(2, 2)).Value 

不過說真的,如果你要硬編碼Cells參數,你可以清理起來像

shDest.Cells(1, 1).Resize(2, 2).Value = shSource.Cells(1, 1).Resize(2, 2).Value 
+4

這個答案是正確的,應該被標記爲如此。 – dnLL

+0

無需限定範圍在指令'shDest.Range(shDest.Cells(1,1),shDest.Cells(2,2))。值= _ shSource.Range(shSource.Cells(1,1) (shDest.Cells(1,1),shDest.Cells(2,2))。Value = _ Range(shSource.Cells(1,shSource.Cells(2,2))。 ,1),shSource.Cells(2,2))。Value – h2so4

相關問題