2013-02-03 68 views
1

我是VBA的新手,我現在正在開發一個速度絕對是一切的項目。所以,在我寫的代碼,我注意到有很多工作表中的單元的命名範圍和功能明確引用這樣的:excel性能使用範圍

function a() 

    if range("x") > range("y") then 

    end if 

    ... (just imagine a lot of named ranges) 

end function 

我的問題是,我應該修改這些功能,使這些命名範圍中的值作爲參數傳入,如下所示:

'i can pass in the correct cells when i call the function 
function a(x as int, y as int) 

    if x > y then 

    end if 

    ... 

end function 

這會加速一點點嗎?這些功能幾乎不斷地被調用(除非有意將該過程置於睡眠狀態)與RTD服務器進行通信。

+3

不完全是這樣,但是如果您可以將所有範圍加載到數組中並在數組中進行比較可能會更快。數組處理肯定比遍歷範圍更快,但我不確定這是否適用於您的情況。 –

+0

不,沒有範圍塊。它們基本上都是位於牀單上各處的單獨開關。那麼你是否建議使用參數是一種更好的方法? – user511792

+0

我不是在暗示,而是其他不適用的東西。這聽起來像一個函數可以幫助組織這些事情到處都是,但它對速度沒有幫助。 –

回答

0

VBA與工作表的「連接」比處理自己的變量要慢得多。如果你的函數多次引用同一個單元格(或範圍),那麼在VBA與它們交互之前將它們加載到內存中將是有利的。例如,如果range("x")>range("y")是函數中唯一一個提及xy的時間,那麼它就沒有關係。如果你有if range("x")>range("a")if range("x")>range("b")等等,那麼你要好得多了與

varX=range("x") 
varY=range("y") 

開始你的函數,然後用VBA變量工作。

看起來,通過參數化函數,您的第二個示例顯示完成了我的建議。這可能會也可能不是這種情況,因爲Excel可能會將這些變量視爲對工作表的引用而不是值(我不確定)。爲了安全起見,您應該在函數的開始處專門定義新變量,然後僅在函數的其餘部分引用這些變量。

總結上面的文字牆,你的目標應該是儘量減少VBA「連接」到工作表的次數。

+0

牆上的文字... – Larry

+0

添加了一些格式,使其(略)更易於閱讀 –