2017-04-13 239 views
1

我想编写一个从第二个excel文件访问日期的excel-vba模块。 我首先想要打开第二个文件到一个vba范围的对象,复制工作表范围到一个vba范围对象,然后关闭第二个文件。VBA Excel - 将范围从第二个文件复制到vba范围对象

数据处理现在只发生在vba范围对象上。

我尝试了以下内容:

Set oMeasuresWorkbook = Workbooks.Open(sMeasuresFileName) 
Set oSrcRange = oMeasuresWorkbook.Names("MEASURES").RefersToRange 
MsgBox oSrcRange(1, 1) 
oMeasuresWorkbook.Close 

'problem: after closing the second file (oMeasuresWorkbook) the 
      oSrcRange Object is gone 
MsgBox oSrcRange(1, 1) 'error here as the oSrcRange Object is gone 

一切工作正常,直到我关闭第二个文件。看起来,oSrcRange是对原始数据的引用。顺便说一句。同样的行为,如果我通过例如访问范围。

设置oSrcRange = oMeasuresWorkbook.Sheets(1).Range( “A:G”)

那么我将如何 “深拷贝” 的范围内。我尝试range.copy,但semmingly我不知道我会如何初始化范围对象(我不想将数据复制到工作表)。

我希望我让自己清楚和sody可以帮助

thanx!

+0

不太确定我明白,在关闭“oMeasuresWorkbook”之后,您想“复制”oSrcRange?为什么不在你关闭它之前复制它? –

+0

你应该使用数组,你的代码运行速度会快很多。如果你仍然想要复制数据,就像你上面说的那样,你应该使用vector(在你操作第2个文件之后,你需要将第二个excel文件中的数据存储到vector中,然后你可以关闭你的2 excel文件),之后,你可以随心所欲地玩矢量.......但我的推理是使用你需要的数组 – Ionut

回答

1

尝试这样的事情,而不是:

Dim SrcRangeArray as Variant 
Set oMeasuresWorkbook = Workbooks.Open(sMeasuresFileName) 
Set oSrcRange = oMeasuresWorkbook.Names("MEASURES").RefersToRange 
SrcRangeArray = oSrcRange.Value 
MsgBox SrcRangeArray (1, 1) 
oMeasuresWorkbook.Close 

'problem: after closing the second file (oMeasuresWorkbook) the oSrcRange Object is gone 
MsgBox SrcRangeArray (1, 1) 

据我所知,没有存储对象的副本,仅在内存中,然后在此不再受更改的方式原始对象。对象存储实际对象,而不是这些对象的值。

在我上面的代码中,我取而代之,并将其放入数组中。即使原始对象已关闭,这些值仍将保留。请注意,您现在只能使用这些值。例如,你不能'关闭'或'打开'数组,因为它只是数值。

我在那里留下原始对象进行演示,但是如果您不需要该对象,并且您只需要它的值,那么我只需跳过中间人就可以使用数组。