2010-08-31 44 views
1

我有一個包含大約25張工作表的電子表格。在一些表中,特別是6,7,13,17,18,19我用數據庫值填充它們。在一些表格中,我填充了兩個表格的數據。 現在我需要創建一個按鈕,它將執行以下操作。 在按鈕單擊事件我需要遍歷所有工作表,並查看是否有任何工作表被填充。如果它被填充,然後將這些內容複製到一個文件。我已經實現了應對一個工作表內容到一個文件。如何在vba中實現多線程和其他特定事宜

問題1) 我無法理解如何處理多個文件。

問題2) 如何記錄特定工作表已填充兩個表值。因爲我需要爲每個表創建一個文件。

問題3) 最重要的這將需要很多時間,因此我想要加快我的操作,所以我想要做多線程。任何其他提高速度的方法都會很棒。

+1

VBA不支持多線程。爲了更加準確,Office不支持多線程。有關更多信息,請參閱http://social.msdn.microsoft.com/forums/en-US/vsto/thread/735c8f26-2129-4b46-8c1a-aad385cab2ed。 VBA本質上很慢,所以仔細檢查你的代碼是很重要的(使用For..Each循環,從循環中移除變量,不要使用變量,避免使用'。'等操作符)。 VSTO和.NET可能會帶來一些收益。 – ForEachLoop 2010-08-31 15:13:17

+0

如何在vba中做代碼優化 – gizgok 2010-08-31 19:56:53

回答

0

程序從Excel中讀取數據時有很大的時間開銷。這可能是速度投訴最常見的原因。
爲了最大限度地減少這種開銷,您需要在每個Read中儘可能傳輸儘可能大的數據塊。
在VBA您可以通過給Variant分配範圍做到這一點:
Dim vArr as variant
vArr=Range("A1:Z5000")

的vArr現在將5000行包含列26的2維數組。

通過Interop使用.NET這種技術更重要,因爲時間開銷比VBA還要大。