2015-03-02 101 views
0

不確定這是否是代碼特定的問題,所以我現在將是通用的。Excel VBA慢速計算循環迭代

我有一個有點複雜的宏,首先讀取用戶手動輸入工作表的金融市場數據,然後繼續處理該市場數據,生成所需的市場曲線等,然後計算某些利息估值。

該過程需要大量的循環,因爲有成千上萬的工具需要進行估價。但是,我注意到,每隔一段時間,宏將循環得非常緩慢 - 每次迭代大約2-3秒。當我有Excel工作簿時,我可以在底部看到它正在說「計算(4個處理器x%完成)」。

要解決此問題,我必須手動強制關閉Excel;通常這會解決問題,下次運行該程序時它可以正常工作。

我正在運行Windows 8(不是8.1)和Excel 2013.我聽說這個組合很容易崩潰/錯誤(我經歷過幾次自己,Excel需要很長時間來處理基本的請求,如字體格式化或將自發崩潰,沒有明顯的原因)。

但是,我想問社區,看看問題是否更普遍/已知。

謝謝!

+1

關閉'ScreenUpdating'並設置'Calculation'到'xlCalculationManual'正在運行的迭代之前,然後他們逆轉最後。此外,請確保您的代碼(如果可能的話)正在處理數組,而不是範圍本身。請參閱[我的答案](http://stackoverflow.com/a/20754562/2548721),您可以執行一些步驟來加速代碼。 – Manhattan 2015-03-03 03:26:50

回答

1

作爲創建一個通用尖端快Excel宏:只要prossible不通過細胞循環,你將一個範圍物體上使用with語句獲得更好的性能,或者你需要在一個更對數據進行操作精心製作的方式嘗試將您的數據範圍複製到2維數組中,通過數組循環將比循環通過工作表中的單元格快幾個數量級,然後可以將數組轉儲回範圍。

1

在代碼的開頭嘗試application.visible = false。然後確保在最後執行application.visible = true。應該幫助。

0

嘗試將光標移到xlBeam 它將改變一切在速度方面在Windows 8.1

Sub CurseurDefault(zz As Boolean) 
    If zz = True Then 
     Application.Cursor = xlDefault 
     'Call ShowCursor(True) 
    Else 
     Application.Cursor = xlIBeam 
     'Call ShowCursor(False) 
    End If 
End Sub