2017-04-23 40 views
1

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

请注意以下事项:

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

回答

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

我怎么也不敢相信简单的即得。谢谢你的回答! – MartyMcfly0033