从多个表格定义动态范围

时间:2017-04-23 18:42:56

标签: excel vba dynamic range

我想从多张纸上定义几个动态范围。我收到错误1004“应用程序或对象定义错误”。我的代码适用于工作表处于活动状态的任何范围,我已经能够通过激活每个工作表然后定义我的动态范围来使其工作。但如果我的电子表格变大,这可能会让我的程序变慢。

请注意以下事项:

  1. .CurrentRegion将无法正常工作,因为它将包含许多不必要的行和列。由于生产区域不同,该报告将包括重复列的区域。
  2. 是否有更好的方法来定义我的范围以防止必须激活每张纸?下面是我正在使用的一些代码的示例。

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

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)