将两个范围从单独的工作表分配给变量

时间:2016-07-19 18:16:54

标签: excel vba excel-vba

我有3个工作表,我正在尝试根据另外两个不同工作表中的范围为其中一个工作表上的变量分配范围。这是我的代码:

Sub Combine()

    Dim range1 As Range
    Dim range2 As Range
    Dim ID As Range

    Set range1 = Worksheets(3).Range("A2:A")
    Set range2 = Worksheets(4).Range("A2:A")
    Set newRng = Worksheets(6).Range(range1, range2)

End Sub

我要回来了

  

运行时错误'1004'

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

范围不能跨越多个工作表。

这可能有效,具体取决于您最终需要做的事情:

Set newRng = Worksheets(6).Range(range1.Address, range1.Address)

但是,由于这些范围在您的示例中具有相同的地址,我认为您想要的是组合它们的Range对象,但是其他一些数据结构,如数组,集合或字典。

注意您的范围无效,Range("A2:A")无效,因此您需要解决此问题。有关查找范围中“最后”单元格的可靠方法,请参阅here。我已修改它以引入整个A列(A1除外),但您可能希望对其进行微调。

newRange必须是不同的数据类型,才能在不引发不匹配错误的情况下工作,例如Collection

Sub Combine()
    Dim coll as New Collection
    Dim range1 As Range
    Dim range2 As Range
    Dim ID As Range

    coll.Add Worksheets(3).Range("A2:A" & Rows.Count)
    coll.Add Worksheets(4).Range("A2:A" & Rows.Count)
    Set newRng = coll
End Sub

或作为范围数组:

Sub combine()
Dim newRange(1) As Range


Set r1 = Worksheets(3).Range("A2:A" & Rows.Count)
Set r2 = Worksheets(4).Range("A2:A" & Rows.Count)

Set newRange(0) = r1
Set newRange(1) = r2
End Sub

使用上面的数组示例,您可以将值分配到另一个位置,根据需要进行修改:

Worksheets(4).Range("B1").Value = newRange(0).Value
Worksheets(4).Range("B2").Value = newRange(1).Value