尝试复制范围时运行时错误'1004'(Excel VBA)

问题描述:

我想复制一些我不知道最后一行和一列的单元格区域(虽然我可以很容易地找到那些使用变量)。不幸的是,我试图引用范围的方式是当我使用变量时给我一个运行时错误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)。感谢您的帮助。

使用调整大小功能,因为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

如果你要复制的范围是一组连续的细胞的话,我觉得拿到范围的大小没有硬编码任何行/列数的最简单的方法是使用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 

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

多行,但工作..

我有同样的问题。您需要限定单元格和范围属性。

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