2017-04-13 259 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) 

據我所知,沒有存儲對象的副本,僅在內存中,然後在此不再受更改的方式原始對象。對象存儲實際對象,而不是這些對象的值。

在我上面的代碼中,我取而代之,並將其放入數組中。即使原始對象已關閉,這些值仍將保留。請注意,您現在只能使用這些值。例如,你不能'關閉'或'打開'數組,因爲它只是數值。

我在那裏留下原始對象進行演示,但是如果您不需要該對象,並且您只需要它的值,那麼我只需跳過中間人就可以使用數組。