【问题标题】:Excel VBA selecting multiple dynamic rangesExcel VBA选择多个动态范围
【发布时间】:2014-03-04 04:45:28
【问题描述】:

我正在尝试选择多个动态范围。尝试使用 union 方法,但在第一行出现 Method 'Range' of 'object' Global Failed 错误。

Dim LR As Long
LR = Range("A60000").End(xlUp).Row

Dim R1, R2, R3, R4, R5, MultiRange As Range
Set R1 = Range("A7,:A" & LR)
Set R2 = Range("D7,:D" & LR)
Set R3 = Range("G7,:G" & LR)
Set R4 = Range("H7,:H" & LR)
Set R5 = Range("J7,:J" & LR)
Set MultiRange = Union(R1, R2, R3, R4, R5)
MultiRange.Select
Selection.Copy

【问题讨论】:

    标签: excel vba dynamic range union


    【解决方案1】:

    出现问题的原因是您的范围语句中的逗号。 IE。当你设置R1 你应该写:

    Set R1 = Range("A7:A" & LR)
    

    另外,当您定义变量R1,...,R5 的对象类型时,您应该将其写为

    Dim R1 As Range, R2 As Range, R3 As Range, R4 As Range, R5 As Range, MultiRange As Range
    

    否则R1, ..., R5 将被定义为变体。这不会导致问题,但会节省内存并使代码更简洁。

    【讨论】:

    • 加一个用于声明变量的正确方式。
    【解决方案2】:

    你也可以这样设置:

    Set R1 = Range("A7","A" & LR)
    

    您所做的只是混淆了 Range 语法。
    请参阅下面的一些常见范围语法:

    使用:定义Range

    Range("A1:A" & LR) '~~> where LR holds the last row number
    

    使用,定义Range

    Range("A1","A" & LR)
    

    使用Cells 属性:

    Range(Cells(1, "A"),Cells(LR, "A"))
    Range(Cells(1, 1),Cells(LR, 1)) '~~> another way
    

    使用Range 属性:

    Range(Range("A1"),Range("A" & LR))
    Range(Range("A1").address & ":" & Range("A" & LR).Address) '~~> yet another complicated way
    

    以上所有语法的计算结果为:$A$1:$A$(LR)
    每种都有一定的优点和用途。
    使用您最熟悉的语法。

    补充:

    这个用Intersect Function:

    Set R1 = Intersect(Columns("A:A"),Rows("1:" & LR))
    

    【讨论】:

      【解决方案3】:

      我认为您的代码的问题是您在 A7、D7、..... 之后放置了逗号“,” "设置 R1 = Range("A7,:A" & LR)" 试试这个代码:

      Sub JubaTest()
      
      Dim LR As Long
      Dim R1, R2, R3, R4, R5, MultiRange As Range
      
      LR = Range("A60000").End(xlUp).Row
      
      Set R1 = Range("A7:A" & LR)
      Set R2 = Range("D7:D" & LR)
      Set R3 = Range("G7:G" & LR)
      Set R4 = Range("H7:H" & LR)
      Set R5 = Range("J7:J" & LR)
      Set MultiRange = Union(R1, R2, R3, R4, R5)
      MultiRange.Select
      
      End Sub
      

      【讨论】:

      • 认为主要问题已经在接受的帖子中得到解答,您应该仔细阅读,因为您重复初始声明错误Dim R1, R2, .. As Range 而不是Dim R1 As Range, R2 As Range, R3 As Range, ... @AhmedBerkane
      猜你喜欢
      • 2012-08-17
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多