【问题标题】:Defining Dynamic Ranges from Multiple Sheets从多个图纸定义动态范围
【发布时间】:2017-04-24 03:02:08
【问题描述】:

我希望从多个工作表中定义多个动态范围。我收到错误 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))

【问题讨论】:

    标签: excel vba dynamic range


    【解决方案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)
    

    【讨论】:

    • 我不敢相信这有多么简单。谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2017-12-17
    相关资源
    最近更新 更多