2010-12-07 171 views
1

我想複製一些我不知道最後一行和一列的單元格區域(雖然我可以很容易地找到那些使用變量)。不幸的是,我試圖引用範圍的方式是當我使用變量時給我一個運行時錯誤1004(應用程序定義的或對象定義的錯誤),並且我找不到原因。下面是代碼的樣本:嘗試複製範圍時運行時錯誤'1004'(Excel VBA)

Dim wkbk As Workbook 
Dim copy_rng As Range 
... 
Set copy_rng = wkbk.Worksheets("Payable").Range("A1:Y3500") 
Set copy_rng = wkbk.Worksheets("Payable").Range(Cells(1, 1), Cells(last_row_pay, last_col_pay)) 

第一套說法只是一個例子,它工作正常(所以我知道wkbk正確定義,它的發現了「應付款」工作表)。有人知道爲什麼第二個Set語句不起作用嗎?是否有語法問題? (在調試過程中,如果我將鼠標懸停在last_row_pay和last_col_pay變量上,我可以看到有效值 - 分別爲1533和25)。感謝您的幫助。

回答

4

使用調整大小功能,因爲Cells()函數適用於活動工作表,它可能會感到困惑。

Dim wkbk As Workbook 
Dim copy_rng As Range 
Dim pay_rows As Integer ,pay_columns As Integer 
... 
pay_rows = 3500 
pay_columns = 23 
Set copy_rng = wkbk.Worksheets("Payable").Range("A1").Resize(pay_rows,pay_columns) 

其中A1是數據左上角的單元格。

+0

很好斑點!您確實可以通過激活除「應付」之外的工作表來複制問題。 – 2010-12-07 16:29:39

0

如果你要複製的範圍是一組連續的細胞的話,我覺得拿到範圍的大小沒有硬編碼任何行/列數的最簡單的方法是使用CurrentRegion

Sub GetCurrentRange 

Dim rng as range 
Set rng = Worksheets("Payable").Range("A1").CurrentRegion 

End Sub 

這裏的好處是,即使你添加行/列到你的數據集,你不必理會制定新的列和行限制爲CurrentRegion爲您完成此

例子:

 A  B  C 
1 10 20 30 
2 40 50 60 
3 70 80 90 

Sub GetCurrentRange 

Dim rng as range 
Set rng = Worksheets("Payable").Range("A1").CurrentRegion 

Debug.Print rng.Address //Prints $A$1:$C$3 

End Sub 
0
with Worksheets("Payable") 
    copy_rng = .Range(.Cells(1, 1), .Cells(last_row_pay, last_col_pay)).Value 
end with 

多行,但工作..

0

我有同樣的問題。您需要限定單元格和範圍屬性。

Set copy_rng = wkbk.Worksheets("Payable").Range(Cells(1, 1), wkbk.Sheets("Payable").Cells(last_row_pay, last_col_pay))

相關問題