从多个表中定义dynamic范围

我正在寻找从多个工作表中定义几个dynamic范围。 我得到错误1004“应用程序或对象定义错误”。 我的代码适用于工作表处于活动状态的任何范围,我可以通过激活每个工作表然后定义我的dynamic范围来使其工作。 但是,如果我的电子表格变得很大,这可以真正减慢我的程序。

请注意以下事项:

  1. .CurrentRegion将不起作用,因为它将包含许多不必要的行和列。 该报告将包括由于不同生产领域而重复列的区域。

有没有更好的方法来定义我的范围,以防止激活每个表单? 下面是我使用的一些代码的例子。

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

限定范围以引用特定工作表,而不涉及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)