【问题标题】:Setting number format using Excel object quickly使用 Excel 对象快速设置数字格式
【发布时间】: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


【解决方案1】:

如果每列都有自己的格式,请尝试按整列格式化。此外,对于每一列,不要使用数组,如果格式相同,则可以只使用单个字符串。

对每一列都这样做。

请尝试并提供反馈。

【讨论】:

    【解决方案2】:

    经过更多的实验,我找到了与 S Meaden 相同的解决方案。由于 46 列中只有 14 列不是“常规”,因此我收集了日期、时间和 2 位十进制数字的列号。遍历每一个,为 12000 条记录和 1 列生成一个范围,设置格式。所有列都需要大约半秒时间。

    奇怪的是,使用 46 个对象数组设置一行 46 个单元格所花费的时间比一列中的 12000 个单元格要长得多,但你就是这样。

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多