2012-03-30 61 views
5

我寫了一些功能VBA:保存範圍變量

Sheets("Src").Range("A2:A9").Copy Destination:=Sheets("Dest").Range("A2") 

我希望將源範圍內提取到靈活可變的。

SrcRange = Sheets("Src").Range("A2:A9") 
SrcRange.Copy Destination:=Sheets("Dest").Range("A2") 

但是,這是行不通的。 什麼SrcRange應該變暗?第一行是否正確?
我試着調光SrcRange的範圍,它給了我
Runtime error 91: Object Variable or With block variable not set

我不是很熟悉的語言和文檔已經離開我想(我無法找到返回類型的表(指數)調用,this是我發現的最接近的)。當我點擊錄製宏時,執行一些操作,然後點擊停止,宏體仍然是空白的。

任何人都可以闡明如何使用SrcRange作爲變量?

回答

9

在你自己的答案,您可以有效地做到這一點:

Dim SrcRange As Range ' you should always declare things explicitly 
Set SrcRange = Sheets("Src").Range("A2:A9") 
SrcRange.Copy Destination:=Sheets("Dest").Range("A2") 

你不是真正的「提取」的範圍內給一個變量,你設置的單元格區域的引用。

在許多情況下,這可以更有效以及更靈活:

Dim Src As Variant 
Src= Sheets("Src").Range("A2:A9").Value 'Read range to array 
'Here you can add code to manipulate your Src array 
'... 
Sheets("Dest").Range("A2").Value = Src 'Write array back to another range 
+0

我喜歡能夠讀取Variant變量/數組以獲得更大的靈活性。謝謝你的提示! – 2012-03-31 19:53:28

7

...答案是:

Set SrcRange = Sheets("Src").Range("A2:A9") 
SrcRange.Copy Destination:=Sheets("Dest").Range("A2") 

Set使所有的差異。然後它就像一個魅力。

8

只是爲了澄清,沒有這兩個動作之間有很大的區別,由讓·弗朗索瓦·科貝特的建議。

一個行動是複製/加載從Range("A2:A9")實際數據劃分爲變量數組稱爲vArray(更改爲避免變量數組和薄板都稱爲Src的之間的混淆):

vArray = Sheets("Src").Range("A2:A9").Value

,而另一簡單地設置一個範圍變量(SrcRange)與範圍Sheets("Src").Range("A2:A9")的ADDRESS:

Set SrcRange = Sheets("Src").Range("A2:A9")

在這種情況下,數據不會被複制,而是保留在原來的位置,但現在可以像訪問數組一樣訪問數據。這通常是非常合適的,但是如果您需要反覆訪問,測試或計算這些數據,首先將其加載到Array中會更快。

例如,假設您想對照已知郊區和郵政編碼列表檢查「數據庫」(大表)。這兩組數據都在單獨的工作表中,但如果您希望運行速度更快,則將郊區和郵政編碼加載到數組(駐留在內存中),然後遍歷主數據庫的每一行,並根據數組數據進行測試。這將比從原始表格中訪問兩者快得多。