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

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

【问题讨论】:

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

标签: excel vba userform


【解决方案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,重新分析你的目标,并从不同的角度解决它很有帮助。)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2018-05-30
    • 2018-08-08
    相关资源
    最近更新 更多