Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将两个范围从单独的工作表指定给变量_Vba_Excel - Fatal编程技术网

Vba 将两个范围从单独的工作表指定给变量

Vba 将两个范围从单独的工作表指定给变量,vba,excel,Vba,Excel,我有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 = Worksh

我有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”


有什么建议吗?

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

这可能会起作用,具体取决于您最终需要做什么:

Set newRng = Worksheets(6).Range(range1.Address, range1.Address)
但是,由于这些范围在您的示例中具有相同的地址,我认为您需要的不是将它们组合在一起的
范围
对象,而是其他一些数据结构,如数组、集合或字典


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

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

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

采用两个其他范围
Range(范围r1,范围r2)
的Range方法希望这两个范围彼此位于同一张工作表上,并与调用它的工作表位于同一张工作表上。您已经在工作表3中定义了range1,在工作表4中定义了range2,所以它失败了,并在完全不同的工作表6中调用了它。你期望代码做什么,这样我就可以帮助你实现你的期望?@Mikegrann我想把两个范围从单独的表格分配到一个变量,我想第一个答案可能有效,我现在正在尝试。我从集合中得到一个错误,是因为正如下面的答案所指出的,“A2:a”无效?这将产生相同的1104错误`Set r1=工作表(3).范围(“A2:A”)`是的,如果范围无效,这是导致相同错误的另一个原因。我已对其进行了修改,以引入整个A列(A1除外)但是你可能会想对其进行微调。@cyboashu我想动态地抓取第3页和第4页A列的最后一行,然后将它们组合起来。我试图避免将这两个范围复制并粘贴到一个新位置,方法是将它们设置为变量,然后从该变量开始工作。