【问题标题】:How to VBA change cell's value (display text) without changing its formula?如何在不更改公式的情况下更改单元格值(显示文本)?
【发布时间】:2012-07-10 21:13:42
【问题描述】:

我对这个 VBA 宏有疑问。

Sub demoChangeText()
    Application.Range("B2").Value = "Overidden text"
End Sub

我的测试是here。要运行此宏,请在 Excel 中打开它,按 Ctrl+F8 并选择 demoChangeText

结果,这个宏改变了单元格B2(显示给我们的文本)的值,但清除了它的公式。我需要更改B2 的值,但还需要保留公式。

所以我的问题是如何在不改变公式的情况下改变单元格的显示文本?

更新

我问这个问题是因为我想解决this problem

【问题讨论】:

  • 不要认为这是有道理的。公式是定义显示的内容。如果要更改显示,请更改公式。如果将值更改为“覆盖文本”,则基本上将公式更改为一个简单的公式,即“输出此文本..”
  • @Davuz ChrisNeilsen 完美回答您的问题。我还在下面的答案中附上了解决方案文件

标签: vba excel formula


【解决方案1】:

我不确定这是否会有所帮助,因为很难说出您的基本要求是什么,但无论如何:

有几个因素会影响单元格的显示

  1. 输入的值,如果它是常数
  2. 计算结果(如果是公式)
  3. 单元格的格式
  4. 单元格的条件格式(如果有)

在示例表中,您有一个公式=ROW()&COLUMN(),它返回一个字符串结果22

您可以通过应用单元格格式显示其他内容,
例如,0;0;0;Ov\e\r\ri\d\d\e\n t\ext 的格式将 any 字符串值显示为Overridden text

这可以通过 VBA 应用

Range("B2").NumberFormat = "0;0;0;Ov\e\r\ri\d\d\e\n t\ext\s"

Range("B2").NumberFormat = "0;0;0;""Overridden texts"""

【讨论】:

  • + 1 很好的解释 :) 是的,这是更改显示文本的一种方法。
  • +1 您也可以用引号引起来,而不是转义每个字母的格式。 "0;0;0;""Overridden texts"""
  • @ChrisNeilsen 太棒了!这是用你的答案更新的测试文件dl.dropbox.com/u/6194904/2012/TestChangeText.xlsm
  • @chrisneilsen 非常感谢!它对我有用! VBA 和 Excel 的一个很好的提示。
  • 我需要做同样的事情,但需要一个整数。所以我做了Range("B2").NumberFormat = 5
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
相关资源
最近更新 更多