在更新值时临时更改显示值的 Excel 单元格

Posted

技术标签:

【中文标题】在更新值时临时更改显示值的 Excel 单元格【英文标题】:Temporarily change an Excel's cell displaying value while updating values 【发布时间】:2022-01-20 21:31:21 【问题描述】:

我想设计一个表单,从两个特定单元格中按比例减去一个数字(已在用户窗体文本框中输入),并暂时查看结果,而无需实际/永久更改这些单元格值。 (例如从当前值为 353 和 158 的两个单元格中按比例减去数字 54)

【问题讨论】:

到目前为止你尝试过什么代码?你在哪里遇到了麻烦?请在您的问题中包含这一点。 如果不实际更改单元格的值(或公式),则无法更改单元格中的值,但您可以使用variable 临时存储该值,然后“放back" 当它希望它恢复到原始值时。从 VBA 中refer to worksheet cells 有多种方法。 ...或者我想,如果你想偷偷摸摸,你可以打开user form,sized 和 positioned 与单元格完全相同,所以它只是“似乎”你正在改变价值。我猜另一种偷偷摸摸的方法是使用自定义单元格格式显示备用值。您的minimal reproducible example 将帮助我们帮助您。 (见How to Ask) @braX 我在设计阶段,我想确保没有用于此目的的内置 Excel 功能,谢谢 @ashleedawg 如何使用 Excel 的“假设分析”工具? 【参考方案1】:

这并不完全是“优雅”,但我想您可以使用custom number format 让单元格显示与其实际包含的值不同的值。

Sub run_demo() 'temporarily formats A1 to show custom message
  showValue ActiveSheet.Range("A1"), "Please wait!"
End Sub

Sub showValue(myCell As Range, tmpValue As String)
  Dim origFormat As String

  origFormat = myCell.NumberFormat 'store original cell format
  myCell.NumberFormat = """" & tmpValue & """"  'display custom message

  '...now do whatever u gotta do:
  Application.CalculateFull 'for example you could force recalculation
  pause 3  '(pausing 3 seconds, just for demo)
  
  myCell.NumberFormat = origFormat 'replace original cell format
End Sub

Sub pause(sec As Single)
  Dim t As Single: t = Timer 'get current time
  Do: DoEvents: Loop While Timer < t + 3 'wait til [sec] secs elapsed
End Sub

...但我想如果您要为此烦恼,您也可以只存储 实际单元格值(除非它与工作表重新计算有关,在这种情况下,这种方法会起作用,因为单元格的格式不会影响计算——无论如何,理论上是这样。)

我不清楚您的目标(您的问题有点 vague 并且缺少您尝试过的任何 examples)但无论如何,我不禁觉得可能一个更好的方法来做到这一点。 (我有时发现“take a step back”,重新分析你的目标,并从不同的角度解决它很有帮助。)?

【讨论】:

以上是关于在更新值时临时更改显示值的 Excel 单元格的主要内容,如果未能解决你的问题,请参考以下文章

Excel公式不更新单元格

仅在 Excel 中突出显示具有值的单元格的顶行 |微软访问

当另一个框在excel(VBA)中具有特定值时,如何引用msgBox中的单元格。

如何在excel批量更改单元格类型后的批量刷新显示?

JTable 单元格更新不起作用

带有多个值的单元格的 Microsoft Excel 电子表格筛选器