2012-07-09 159 views
1

我正在編寫一個腳本,將數據從一個工作簿複製到另一個工作簿。後者被用作一種數據庫(不是我的想法)。作爲一個測試,我複製〜300行數據,其中3列條件格式,其餘都是純文本。複製文本很容易,接近即時,但格式化更加困難。目前我使用下面的代碼來複制格式化的單元格:使用VBA複製有條件格式化的單元格

thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).Copy 
masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).PasteSpecial (xlPasteAll) 

約300行,這大約需要40秒,這太慢了。我不能複製由多行組成的範圍,因爲它們不是按順序粘貼的。

我嘗試使用下面的代碼來嘗試和複製格式。

masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).value = thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).value 
masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).Font.Color = thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).Font.Color 
masterSheet.Range("G" & CStr(mRow), "I" & CStr(mRow)).Interior.ColorIndex = thisSheet.Range("G" & CStr(rRow), "I" & CStr(rRow)).Interior.ColorIndex 
'cell color and font color are the only things i am interested in 

該代碼在大約3秒內執行,但是沒有條件格式應用的格式被複制。

是否有更有效的方法來複制條件格式應用的單元格和字體顏色?

+1

您是否考慮過將數據加載到數組中並使用函數中的select case(或if)語句編寫自己的格式條件?執行性能應該非常快。 – Trace 2012-07-09 09:37:00

+1

難道你只是在第二個工作簿中有相同的(或類似的)條件格式規則嗎?然後,您只需要按原樣複製數據,格式將被照顧好。 – Dan 2012-07-09 09:48:40

+0

@丹我不允許更改第二張紙的佈局或格式 – elexis 2012-07-09 23:08:03

回答

1

嘗試增加給你的代碼的開始:

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

這給它的結束:

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 

如果不工作,以提高你的速度,你需要在那裏我建議將條件格式化硬編碼到VBA中。

因此,例如,如果其中一個條件格式設置規則在數字超過100時使單元格變爲紅色,則將該檢查添加到VBA中,同時它將複製值並將目標單元格設置爲基於其值的所需格式。

+0

謝謝,這要快得多! – elexis 2012-07-09 23:17:37

相關問題