2016-01-11 88 views
0

我试图将8 x 1范围的值存储到相同维度的范围内,但在工作簿中的另一张表上。这很容易,只不过我的脚本在这些相同尺寸的不同范围内循环,我需要将它们全部存储在第二张纸上。目前我的代码看起来是这样的:使用变量来定义范围

Sheets("Sheet1").Range(Cells(i, 2), Cells(i + 7, 2)).Value = Sheets("Sheet2").Range("OriginalData").Value 

其中“i”是用作循环迭代变量之中。

此代码抛出错误“错误1004”应用程序定义或对象定义的错误“”。有人能解释我做错了什么,以及如何以这种方式动态地正确定义范围对象?

+0

我不认为这是您链接到的问题的重复,因为这里的核心问题是动态定义目标范围,而不是从不活动的工作表复制。 – Phil

+0

也许不是;也许是[这个类似的答案]的副本(http://stackoverflow.com/questions/27763089/count-the-number-of-rows-in-another-sheet/27763394#27763394)。 – Jeeped

+0

是的,答案可以解决这个问题......但是当问题不同时很难找到答案! – Phil

回答

2

你的问题是,Sheets("Sheet1").RangeCells不知道他们应该属于Sheets("Sheet1")

with Sheets("Sheet1") 
    .Range(.Cells(i, 2), .Cells(i + 7, 2)) = _ 
     Sheets("Sheet2").Range("OriginalData").Value 
end with 

'alternate 
Sheets("Sheet1").Range("B" & i).Resize(8, 1) = _ 
     Sheets("Sheet2").Range("OriginalData").Value 

With ... End With statement允许你父表明确地传递到两个.Range.Cells的前缀期间(又名句号)。

+0

谢谢!我选择了替代选项,因为它代码少,而且这个东西已经太长了。它的工作原理与我需要的完全一样。 – Phil

-1

将复制和粘贴工作?我不确定数据的具体情况,但看起来像复制和粘贴会更好。

所以像

Sheets("Sheet1").Range("x:x").Copy Sheets("Sheet2").Range("x:x") 
+0

是的,复制/粘贴工作正常,但源数据单元格是公式,我正在使用特殊粘贴来获取值。由于此脚本有时可能需要很长时间才能运行,因此我希望尽可能节省时间。我被告知我试图使用的方法更高效。 – Phil