【问题标题】:How do I change the text of a cell without changing the formula?如何在不更改公式的情况下更改单元格的文本?
【发布时间】:2014-03-24 23:44:28
【问题描述】:

我是 VBA 新手。这个问题已经被问到并回答了here,但答案似乎太老套了。有没有更好的方法来更改单元格的值而不更改其中的基础公式?我试过 target.text="changed" 但这给了我“需要对象”的错误

我问的原因是,在 UDF 中,您可以更改单元格的显示,但公式仍然存在。如何在 UDF 之外执行此操作?

编辑:

在下面的示例中,myudf 和 my_udf 似乎做同样的事情,每个人都告诉我只做 NumberFormat。问题是 Numberformat 将永久更改单元格。如果您在 A2 中输入了“=my_udf()”,那么只需返回并在那里输入一些随机文本。除非您返回并手动重新格式化单元格(或输入 excel 内置函数),否则它将显示“ThisThatThere”。

模块1

Function myudf()
    myudf = "ThisThatThere"
End Function

Function my_udf()
    my_udf = "Temporary"
End Function

这本工作簿:

Sub Workbook_SheetChange(ByVal sh As Object, ByVal target As Range)
    If target.HasFormula Then
        If LCase(target.Formula) Like "=my_udf(*" Then
            target.NumberFormat = "0;0;0;""ThisThatThere"""
        End If
    End If
End Sub

【问题讨论】:

  • 如果您只是指数字格式,则右键单击单元格 > 格式 > 数字格式。可以在此处输入影响单元格值显示方式的格式掩码。例如。 # "magic hats" 将显示单元格的任何数字作为值,后跟“魔术帽”。如果这不是您的意思,那么请考虑改写您的问题 - 要遵循您真正想要的内容并不容易!
  • 输入“=sum(1,2)”,单元格将显示“3”。该公式仍将存在于该单元格中。因此,UDF 会更改单元格的显示值,同时保持功能没有您建议的 hack。
  • 我不清楚这个问题。 SUM 不是 UDF,所以不确定你的观点。我不会真正将自定义格式称为 hack。此外,“显示”可能意味着几件事。实际示例可能会为您提供更好的答案。
  • 我不明白你所说的“黑客”是什么意思。我建议的数字格式功能是标准的 Excel 行为,即显示单元格的结果,无论是常数还是计算公式的结果。另外,恐怕我不明白你的评论。 =sum(1,2) 的结果是 3,这就是为什么(默认情况下)单元格将显示 3。如果您这样做了,请道歉,但是您是否熟悉电子表格程序的工作原理以及 Excel 中的“公式”是什么?您提到您知道如何使用 UDF 执行此操作。我 99% 确定 UDF 只能更改数字格式。
  • @Cor_Blimey:请看我的编辑。 “我 99% 确定 UDF 只能更改数字格式”...如果是这种情况,那么 myudf 的格式会像在 my_udf 中一样保持不变

标签: vba excel


【解决方案1】:

如果公式返回数值而不是文本值,这很容易。将公式放入单元格中,选择它并运行:

Sub ChangeText()
    Dim DQ As String, mesage As String
    DQ = Chr(34)
    mesage = DQ & "override" & DQ
    ActiveCell.NumberFormat = mesage & ";" & mesage & ";" & mesage & ";"
End Sub

UDF 本身,就像非 VBA 工作表公式一样,只能将值返回到单元格............最好的值可以影响条件格式。

【讨论】:

  • 但是如果您返回并在单元格中输入文本,格式就会保留。
  • NO!!............如果你在单元格中放置一个UDF或一个正则公式返回一个数值,宏提供的文本将可见........如果您稍后在同一单元格中手动输入文本,*您的手动文本将是可见!
  • 我从未说过 UDF 一定是数字
  • 你是对的!............如果你有一个非数字 UDF ,请忽略我的帖子。
猜你喜欢
  • 2012-07-10
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2014-11-20
相关资源
最近更新 更多