我想从多张纸上定义几个动态范围。我收到错误1004“应用程序或对象定义错误”。我的代码适用于工作表处于活动状态的任何范围,我已经能够通过激活每个工作表然后定义我的动态范围来使其工作。但如果我的电子表格变大,这可能会让我的程序变慢。
请注意以下事项:
是否有更好的方法来定义我的范围以防止必须激活每张纸?下面是我正在使用的一些代码的示例。
Set Sony = ThisWorkbook.Worksheets("Report")
Set Prod = ThisWorkbook.Worksheets("Prod Report")
Prod.Activate
Set rng1 = Prod.Range(Range("C3"), Range("C3").End(xlDown).Offset(-1, 0))
Set rng2 = Prod.Range(Cells(1, 1), Cells(1, 52))
Sony.Activate
Set rng3 = Sony.Range(Range("B4"), Range("B4").End(xlDown).Offset(-1, 0).End(xlToRight).Offset(0, -1))
答案 0 :(得分:2)
限定范围以引用特定工作表,而不是它们引用ActiveSheet
。这应该将也应用于括号内的范围;没有它你就会遇到运行时错误。
Set rng1 = Prod.Range("C3", Prod.Range("C3").End(xlDown).Offset(-1, 0))
' ^^^^^
Set rng2 = Prod.Range("A1", Prod.Cells(1, 52))
' ^^^^^
Set rng3 = Sony.Range("B4", Sony.Range("B4").End(xlDown).Offset(-1, 0).End(xlToRight).Offset(0, -1))
' ^^^^^
对于rng2
,您还可以使用更简单的表示法:
Set rng2 = Prod.Range("A1").Resize(1, 52)