Excel 宏将字段中的公式保留为文本

Posted

技术标签:

【中文标题】Excel 宏将字段中的公式保留为文本【英文标题】:Excel macro leaves formulas in fields as text 【发布时间】:2015-12-15 14:35:02 【问题描述】:

我有一个冗长的 VBA 宏,可以将内容放入 Excel 工作表中。有些内容是简单的公式,如=Q7*.3。宏完成后,这些将在单元格中显示为文本,而不是值。 F9 没有修复它。

现在,如果我只需单击其中一个单元格,然后在编辑栏中并按回车键,公式就会立即正确计算。从那时起,一切都适用于该单元格。

我记得以前见过这个,但我不记得解决方案

是的,格式设置为数字格式 是的,我尝试手动更改格式,但没有效果 是的,我将 .Calculate 发送到工作表,以及手动发送 不,没有前导引号或类似的东西 不,我没有进行任何更改以使其正确计算,只需在编辑栏中点击返回即可

似乎是某种状态标志未在单元格上设置,因此 Excel 认为它不必计算它?示例:

TempD = GetFXRate("HUF")
WS.Cells(R, 20).Formula = "=Q" & R & IIf(Round(TempD, 4) = 1, "", "*" & TempD)

所有值和常量都是有效的。 TempD 约为 0.3。所有引用的单元格都存在。第一次迭代 R=7。

【问题讨论】:

您是使用<range>.Formula 还是<range>.Value 通过VBA 放置内容? WS.Cells(R, 19).Formula = "=Q7*" & FXRate 总是最好发布产生此问题的代码,否则我们只是在猜测问题所在。 我可以重现的唯一方法是在设置公式之前将单元格的数字格式设置为文本。 在您使用.formula= 更新值之前 单元格的数字格式是什么?如果您在 设置值之后更改为通用数字格式,您将看到您在此处描述的行为。 【参考方案1】:

根据您基于我的最终评论的“答案”,唯一可能的解决方案是将您的normal 单元格样式设置为text,这样您的新工作表将添加normal 样式text 而不是 general

您可以通过右键单击home 选项卡的cell styles 部分上的normal 样式并单击modify 来更改此设置。

点击format按钮,选择general并点击ok,然后再次点击ok

再次运行您的脚本,您应该会发现您的新工作表是使用所有单元格的通用数字格式创建的。

【讨论】:

【参考方案2】:

问题的出现取决于最初制作工作表的方式。如果您手动创建工作表,它将获得正确的格式并且一切正常。如果您在 VBA 代码中创建工作表,它显然会将默认格式设置为不同的 - not 文本,某种不确定的格式。因此,即使您没有在代码中的任何地方应用单个 .NumberFormat ,或者更奇怪的是仍然继续在稍后的某个时间正确设置格式,它仍然会以这种奇怪的状态结束。我认为这是一个错误。

无论如何,解决方案是在创建后立即设置所有单元格的格式:

Dim WS As Worksheet
Set WS = WB.Sheets.Add(After:=Worksheets(Worksheets.Count))
WS.Cells.NumberFormat = "General"

从该点插入可以正常工作,设置格式也是如此。

【讨论】:

再一次,我无法重现这一点。如果您没有发布更完整的代码(包括您创建工作表的部分),我们就可以分析正在发生的事情,这不是正确答案。此外,它确实借鉴了我对解决方案的最后评论,这有点粗鲁!

以上是关于Excel 宏将字段中的公式保留为文本的主要内容,如果未能解决你的问题,请参考以下文章

在Excel中如何将数字格式批量转换为文本格式,并且保留二位小数?

WPS复制粘贴默认为无格式文本,想改为保留原格式

excel保留整数17位,

excel vba将公式转为数值

excel vba将公式转为数值

Excel公式-如果没有查找值,则VLOOKUP保留为空白