2017-06-25 21 views
-2

我想將數據從一個工作表複製到另一個工作表(具體取決於可用的工作表數量),列數是動態的。使用單元格的範圍顯示錯誤

如果我使用下面的代碼,它顯示了一個應用程序對象錯誤:

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = ThisWorkbook.Worksheets(i).Range(Cells(3, 2), Cells(3, 7)).Value 

而如果我用這個:

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = ThisWorkbook.Worksheets(i).Range("B2:G2").Value 

它工作正常,但我不能讓我的專欄的動態。

+1

這些類型的問題已經問SOOOOOOOO多次在SO ....我可以指出至少10個不同的問題 –

+0

@SiddharthRout **所有** VBA問題已被詢問至少10次。答案總是歸結爲「限定你的對象」,「停止使用選擇和激活」,「聲明你的變量」。 – YowE3K

+0

@ YowE3K:不是大聲笑:)但是,如果你發現任何這樣的問題,隨時關閉它或投票將其關閉作爲一個副本。 –

回答

2

如果您不符合您的Cells參考資料,它們默認爲ActiveSheet.Cells。因此,你的代碼

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = _ 
    ThisWorkbook.Worksheets(i).Range(Cells(3, 2), Cells(3, 7)).Value 

相當於

Worksheets(1).Range(ActiveSheet.Cells(m, 2), ActiveSheet.Cells(m, 7)).Value = _ 
    ThisWorkbook.Worksheets(i).Range(ActiveSheet.Cells(3, 2), ActiveSheet.Cells(3, 7)).Value 

這顯然是沒有意義的。

您應該使用

Worksheets(1).Range(Worksheets(1).Cells(m, 2), Worksheets(1).Cells(m, 7)).Value = _ 
    ThisWorkbook.Worksheets(i).Range(ThisWorkbook.Worksheets(i).Cells(3, 2), ThisWorkbook.Worksheets(i).Cells(3, 7)).Value 

這是更容易閱讀,如果你設置一些Worksheet對象

Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Set ws1 = ActiveWorkbook.Worksheets(1) 
Set ws2 = ThisWorkbook.Worksheets(i) 

ws1.Range(ws1.Cells(m, 2), ws1.Cells(m, 7)).Value = _ 
    ws2.Range(ws2.Cells(3, 2), ws2.Cells(3, 7)).Value 
+0

非常感謝,現在正在工作 –

+0

++謝謝:) –

相關問題