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

时间:2010-12-07 15:18:34

标签: vba excel-vba excel

我正在尝试复制一系列我不知道最后一行和列的单元格(尽管我可以很容易地找到那些使用变量的单元格)。不幸的是,我尝试引用范围的方式是在使用变量时给出运行时错误1004(应用程序定义或对象定义的错误),我无法弄清楚原因。以下是代码示例:

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))

第一个Set语句只是一个例子,它工作正常(所以我知道wkbk已正确定义,它正在找到“应付款”工作表)。有人知道为什么第二个Set语句不起作用?有语法问题吗? (在调试期间,如果我将鼠标悬停在last_row_pay和last_col_pay变量上,我可以看到有效值 - 分别为1533和25.)感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

使用resize函数,因为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是数据的左上角单元格。

答案 1 :(得分: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

答案 2 :(得分:0)

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

更多行,但工作..

答案 3 :(得分:0)

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

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