我正在使用 Excel 模板通过 VBA 从 Access 生成报告。打开新创建的文件时,许多单元格的格式已从“数字”更改为“日期”。
模板中的表格包含格式为“数字”的单元格:
这些单元格没有从 Access 推送的数据,它们有引用工作簿中另一张表的公式。数据导出完成后,我打开 Excel 文件并看到以下内容:
这是这表格会执行此操作,但工作表中的其他表格单元格当仅包含数字时也会更改为“日期”格式。
我编写了 VBA 代码,所以我知道不是代码改变了格式,并且模板中没有定义宏。
我找过答案,但似乎没有一个能解决这个问题。例如,以下所有 SU 问题不要请为我提供答案:
我想找到一种不需要更改 Excel 全局设置的解决方案。Access 数据库将发送给客户,我不希望他们为此更改设置,他们还将使用不同版本的 Excel(我有 2013)
我曾尝试使用 VBA 格式化某些单元格,同时将数据推送到这些单元格中,但客户希望能够编辑 Excel 模板,而无需更改数据库中的 VBA 代码;因此,将数据推送到单独的工作表中,然后由表格引用。如果我对某些单元格的格式进行硬编码,他们将无法编辑它。
如何停止 Excel 更改格式?
更新
我开始认为这是由 Excel 2013 中的一个错误引起的。不幸的是,我没有其他版本可供我测试这个理论,但格式的更改仅发生在当前可见的工作表上模板保存后。
我在工作簿中添加了一个“封面”,其中包含有关报告的信息。此表不引用工作簿其他部分的任何数据。选择此表后,我保存并关闭了模板。使用此最新模板生成的报告在生成并打开报告时不会更改单元格格式。
我现在还注意到,其他工作表与存在格式问题的工作表类似,不要由于单元格在保存/关闭模板时不是“活动”工作表,因此单元格会被随机重新格式化。
这让我认为这是 Excel 的错误,与我的代码无关;尽管它暂时解决了这个问题,但我还是想找到一个解决方案,或者至少能解释一下这种奇怪的行为。
答案1
我发布此文是为了解决方法,不是一个答案,希望它对遇到这个问题的其他人有用。
如果您发现模板生成的文件中的单元格格式无缘无故发生变化,则可能需要向工作簿模板添加另一张不包含任何公式或引用的工作表。确保在保存/关闭模板时选择了此工作表。
从模板生成的新文件的格式不应再改变。
我仅使用 Office 2013(Access 和 Excel)对此进行了测试。
答案2
我遇到了这个问题……我所做的就是重新格式化模板的最终结果,清除所有数据并将其保存为新模板。问题已解决……请自行想象。
答案3
我在使用 Excel 时遇到了类似的问题,它将单元格的格式从“会计”更改为“用户定义” _($* #,##0.00_);_($* (#,##0.00);_($* ""_""??_);_(@_)
。
我可以通过设置Local
参数来修复它Workbook.SaveAs
功能到True
。
参数描述Local
(来自 MS VBA Docs):
True
根据 Microsoft Excel 的语言保存文件(包括控制面板设置)。False
(默认)根据 Visual Basic for Applications (VBA) 的语言保存文件(通常为美国英语,除非Workbooks.Open
运行的 VBA 项目是旧的国际化 XL5/95 VBA 项目)。