我正在尝试复制一系列我不知道最后一行和列的单元格(尽管我可以很容易地找到那些使用变量的单元格)。不幸的是,我尝试引用范围的方式是在使用变量时给出运行时错误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.)感谢您的帮助。
答案 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))