2011-09-19 41 views
0

excel工作簿的大小是否會影響VBA代碼的運行?我已經將一個VBA代碼寫入了一個大小爲200 MB的excel工作簿。該excel工作簿具有瀏覽按鈕,這些瀏覽按鈕選擇另一個Excel文件並執行操作,並將一些所需內容寫回200 MB大小的文件。但是這些操作太慢了8到13分鐘。這些excel工作簿包含圖表,圖形和更多模塊以及16張和數據透視表等很多東西(這些會影響運行vba代碼嗎?)excel工作簿的大小是否與運行vba代碼有關?

但是我寫的另一個新的excel工作簿的代碼是大小200KB與相同的瀏覽按鈕和所有的東西,這裏需要4秒完成。我不知道怎麼回事。使用for循環對於大文件是有害的,但是我無法在我的代碼中沒有循環的情況下執行我的操作。如果for循環有害,那麼它甚至應該影響200KB的大小,但沒有危險!我現在必須做什麼?

+1

獨立於宏觀的,一個巨大的文件需要時間來加載和保存!這很明顯。這不正是時間差異的理由嗎? –

+1

您的代碼可能會加速嗎?可能值得張貼花費時間最多的代碼部分。 – Fionnuala

+0

你也可以嘗試從你的excel工作簿中刪除不必要的格式:刪除顯然未使用的行和列等...你可能會感到驚訝。我最近用一個30MB的文件減少到200KB。 –

回答

2

確保在寫入工作簿的代碼之前使用了Application.ScreenUpdating=FalseApplication.Calculation=xlManual。 (然後在最後重置它們)。

另外,每次讀取和寫入Range都有很大的開銷,所以通常讀取一大塊數據到一個變量的速度要快得多。

Dim vArr as Variant 
vArr=Worksheets("Sheet1").Range("A1:Z9999").Value2 

'Manipulate the resulting array. 
For j = LBound(vArr) To UBound(vArr) 
    For k = LBound(vArr,2) To UBound(vArr,2) 
     vArr(j,k)=vArr(j,k)*2 
    Next k 
Next j 

'And then write it back to its destination. 
Worksheets("Sheet2").Range("A1:Z9999")=vArr 
1

即使僅僅讀取和/或寫入文件的操作在如此大的文件中花費大量時間,許多中間操作也可能受到影響。

相關問題