2011-03-22 78 views
1


我有一個VBA宏我已經寫了Excel 2003中它進口的其他文件數據的一些重大問題非常緩慢。結果是Excel文件的文件大小(行數/列數)隨着每個導入的文件而增加。在Excel 2003中,它對前50個導入的文件運行速度非常快,然後減慢速度。但對於Excel 2010,即使對於少量文件也需要相當長的時間。問題在於一次執行多次的語句:列/行操作(插入,刪除)在Excel 2010中

Sheets("Sheetname").Rows(LastRow).Insert Shift:=xlDown 

當Excel 2010文件變大時,該行幾乎需要一秒鐘。當我手動添加一行時,我遇到了同樣的問題。

我做的事情通常一堆來提高性能:

Application.ScreenUpdating = False 
Application.DisplayStatusBar = False 
Application.Calculation = xlCalculationManual 
Application.EnableEvents = False 
ActiveSheet.DisplayPageBreaks = False 
ActiveSheet.AutoFilterMode = False 

在此先感謝您的幫助。我很確定別人已經有這個問題。

+1

你能找到一種不使用該行插入的方法嗎?你如何添加新的信息? – 2011-03-22 16:12:51

+0

「LastRow」真的是最後一行嗎?如果是這樣,爲什麼插入而不只是複製? – 2011-03-22 20:34:14

+0

使用插入是因爲前一行的格式被複制到新插入的行。但我想我只是填寫數據而不關心格式。 – Shirky 2011-03-23 12:15:38

回答

2

問題是我應用了條件格式。對於添加到報表中的每一條新行,都會創建一個新的條件格式規則,以便爲每行的單元格填充顏色(例如,格式規則爲「如果當前行的列A中的單元格包含'啓用'然後使細胞綠色「)。
在Excel 2003中,如果Application.Calculation設置爲手動或者條件格式的處理方式不同(我不知道),條件格式似乎不會被重新計算。
瞭解了這一點後,我手動創建了一個條件格式規則,用於必須着色的整個列,並移除代碼以從電子表格中着色單個單元格。現在在Excel 2010中運行得很快。
我不知道是否有可能提交錯誤報告(如果Application.Calculation設置爲手動禁用條件格式重新計算)。

+0

天氣或不使用條件格式時,應該有一個很好的例程,它會爲你插入一行,如果這真是唯一的選擇。你應該改變這個問題,因爲沒有辦法從這個問題得到這個解決方案。你真正需要的是在執行EACH插入後保持公式不被調整的方法。 – 2015-06-30 22:44:55

1

使用插入速度很慢,因爲它強制Excel執行大量工作。它的速度要快得多,直接從一個變體向表單寫入大量數據。
如果您想在底部保留一些公式(例如總計),那麼將公式塊複製到變體中,將數據寫入工作表,調整公式並在最後寫回公式會更快。
如果您有其他公式可以引用添加數據的工作表,則可以使用動態範圍名稱來引用數據,或使用普通範圍名稱來引用總公式。

+0

感謝您的提示,我只會在底部添加數據(請參閱評論)。 – Shirky 2011-03-23 12:16:22

+0

但問題仍然是爲什麼插入在Excel 2010中變得如此緩慢。它在2003年完美運行。我有一個相關的問題,我刪除了行,在那裏它是一樣的。 – Shirky 2011-03-23 12:18:46

+0

可能由於行數和列數增加:插入和刪除意味着搜索所有公式,以便可以調整引用。 – 2011-03-23 12:51:37

0

晚會有點晚,但首先導入所有數據,然後爲範圍添加格式化/條件格式化,然後爲每條記錄添加新的條件格式。