【发布时间】:2017-08-08 16:39:28
【问题描述】:
我正在将 46 列的 12,000 条记录作为生产报告写入 Excel 文件。填充数据时不显示工作表。
以前的 StackOverflow 信息教会我使用对象数组将值放入范围内以提高速度。我曾希望这也适用于格式化值。
代码片段:
objExcel.Calculation = XlCalculation.xlCalculationManual
objExcel.ScreenUpdating = False
dcel = objWS.Range(objWS.Cells(rowdatastart, 1), objWS.Cells(rowdataend, nProdReportCol.ProdReportColCount - 2))
dcel.Value = aobj
dcel.NumberFormat = bobj
objExcel.ScreenUpdating = True
objExcel.Calculation = XlCalculation.xlCalculationAutomatic
aobj 和 bobj 是适合范围的 object(,) 数组。 bobj 包含诸如“h:mma/p”之类的字符串以将时间显示为“12:23a”,以及“0.00”以将数字显示为“53/25”。
“dcel.value = aobj”需要半秒钟。 “dcel.NumberFormat = bobj”需要 38 秒。
对我错过/误解的内容有什么建议吗?我宁愿 7 秒的报告(启动 excel、写入、保存、关闭 excel)而不是 45 秒,因为我希望数字/日期/时间按照我的选择显示。
【问题讨论】:
-
不适用于格式。也许您可以创建范围对象,以便可以一次格式化所有需要某种
bobj格式的单元格;或者您可以使用条件格式一次设置整个范围。由于您的代码正在运行,这可能是Code Review 上的最佳选择
标签: vba excel number-formatting