使用VBA复制有条件格式化的单元格
问题描述:
我正在编写一个脚本,将数据从一个工作簿复制到另一个工作簿。后者被用作一种数据库(不是我的想法)。作为一个测试,我复制〜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秒内执行,但是没有条件格式应用的格式被复制。
是否有更有效的方法来复制条件格式应用的单元格和字体颜色?
答
尝试增加给你的代码的开始:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
这给它的结束:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
如果不工作,以提高你的速度,你需要在那里我建议将条件格式化硬编码到VBA中。
因此,例如,如果其中一个条件格式设置规则在数字超过100时使单元格变为红色,则将该检查添加到VBA中,同时它将复制值并将目标单元格设置为基于其值的所需格式。
+0
谢谢,这要快得多! – elexis 2012-07-09 23:17:37
您是否考虑过将数据加载到数组中并使用函数中的select case(或if)语句编写自己的格式条件?执行性能应该非常快。 – Trace 2012-07-09 09:37:00
难道你只是在第二个工作簿中有相同的(或类似的)条件格式规则吗?然后,您只需要按原样复制数据,格式将被照顾好。 – Dan 2012-07-09 09:48:40
@丹我不允许更改第二张纸的布局或格式 – elexis 2012-07-09 23:08:03