【发布时间】: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 中一样保持不变