尝试复制范围时运行时错误'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
是数据左上角的单元格。
答
如果你要复制的范围是一组连续的细胞的话,我觉得拿到范围的大小没有硬编码任何行/列数的最简单的方法是使用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))
很好斑点!您确实可以通过激活除“应付”之外的工作表来复制问题。 – 2010-12-07 16:29:39