【问题标题】:How can i get the NOW function to update every second?如何让 NOW 功能每秒更新一次?
【发布时间】:2022-09-22 23:38:08
【问题描述】:

我希望单元格 B6 B8 B10 中的数据每秒更新一次,而不是要求我编辑电子表格以显示实时时间。我怎样才能做到这一点,公式应该是什么样子?

  • 让我们开始:为什么?询问的原因是公式不能自行更新,但需要触发。可以使用 VBA,但它需要经常在后台运行,它会减慢您的文件速度,并且在与其他文件/宏一起使用时可能会导致意外错误。
  • 由于明显的减速原因,我宁愿避免使用 VBA,我更喜欢公式或其他理想方式。
  • 比,它需要一个触发器来重新计算。工作簿中的任何更改=NOW() 都会重新计算,因为它是易变的。但如果没有改变,它将保持它的价值。使用公式不可能每秒或每个给定的间隔更新。但它的目的是什么?
  • 使用 vba 不必很慢。考虑使用 OnTime 调用仅计算所需单元格(或仅写入时间)并重新安排自身的微型 Sub
  • 也许this 是您正在寻找的?但我同意这个说法,为什么?当您有任务栏时,在 excel 中拥有一个“时钟”根本没有任何好处。我确实了解您尝试对其进行时区划分(对于它,还有其他 VBA 编码,因此它可以通过互联网进行更新),因此,如果需要,我会做一个按钮来“翻译”时间

标签: excel vba math excel-formula


【解决方案1】:

当 Sachin Kohli 发表他的答案时,我研究了这个答案。我的回答类似于他使用 VBA 的解决方案,但更进一步概括了这个概念。

如果将此代码复制到标准模块中:

Public Sub RecalculateCells(Optional ByVal CellAdress As String = "", _
                            Optional ByVal CellWorkbook As String = "", _
                            Optional ByVal CellWorksheet As String = "", _
                            Optional ByVal updateTimeInterval As Double = 1#, _
                            Optional ByVal updateState As Long = 0)
    Static continue As Boolean

    If updateState = 1 Then continue = True
    If updateState = -1 Then continue = False

    If continue Then
        Workbooks(CellWorkbook).Worksheets(CellWorksheet).Range(CellAdress).Calculate
        Application.OnTime Now() + updateTimeInterval / 86400#, _
            "'RecalculateCells """ & CellAdress & """, """ & CellWorkbook & _
            """, """ & CellWorksheet & """, " & updateTimeInterval & ", 0'"
    End If
End Sub

Public Sub StartUpdatingRange(rng As Range, updateTimeInterval As Double)
    RecalculateCells "B4", rng.Worksheet.Parent.Name, rng.Worksheet.Name, _
        updateTimeInterval, 1
End Sub

Public Sub StopUpdatingRange()
    RecalculateCells , , -1
End Sub

您可以在任何给定的时间间隔重新计算任何范围。下面的示例 sub 将每秒重新计算一次单元格 B6 到 B10。

Sub UpdateB6toB10()
    StartUpdatingRange ThisWorkbook.Worksheets(1).Range("B6:B10"), 1
End Sub

您可以通过调用StopUpdatingRange 在任何给定时间停止重新计算。您也可以使用不同的范围和不同的更新率多次调用StartUpdatingRange。拨打StopUpdatingRange 将停止所有更新。

请注意,如果计算设置为自动,则所有内容都将以指定的速率更新,而不仅仅是选定的单元格。因此,要实际只更新选定的单元格,请将计算模式设置为手动:

【讨论】:

    【解决方案2】:

    用VBA解决:-> 每次更新时钟第二

    Sub clock_timer()
        Sheets("Sheet1").Range("B6").Value = Now
        Application.OnTime Now + TimeValue("00:00:01"), "clock_timer"
    End Sub
    

    没有VBA解决:-> 每次更新时钟分钟

    使用查询和连接,请按照下列步骤操作;

    Step 1: Select "B5 to B10" & click on Insert -> Table
    Step 2: Click on Data -> From Table/Range
    Step 3: A new pop up will open with Query -> Click on Close & Load
    Step 4: Right click on newly created Table under section "Queries & 
            Connections" & go to Properties
    Step 5: Edit Refresh option to "Every 1 Minute"
    

    没有 VBA 的另一种解决方案:通过下载excel的扩展“XLTools”

    希望能帮助到你...

    【讨论】:

      【解决方案3】:

      它实际上是 VBA 中的一个非常简单的答案。

      Sub Macro1()
      
      x = Application.Ontime Now() + Timevalue("00:00:01"), Macro1 
      Range("A1").Value = x 
      
      End Sub
      

      此宏将每秒更新工作表上单元格 A1 中的时钟。

      一个建议是使用“从网络获取数据”选项卡并在 Excel 单元格中从互联网调用不同的时区时间。

      你要做的是。

      选择数据选项卡 > 从 Web 获取数据 > 在 excel 中打开的浏览器中输入 Dateandtime.com。

      一旦有数据,来自单元格的日期和时间就是动态的。只需点击数据和连接。设置每 1 分钟或每秒刷新一次数据。这将为您提供来自互联网的实时时钟。您还可以从不同的时区获取时间。

      一个例子是 www.Dateandtime.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-20
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多