代码之家  ›  专栏  ›  技术社区  ›  mjac

工作簿,保存,关闭,重新打开(w/timevalue),重复

  •  1
  • mjac  · 技术社区  · 7 年前

    宏运行时有一个指定为“closeme”的按钮。它以前是根据我的需要运行的,但现在不再运行了(因为我尝试在另一个工作簿中使用此代码,但没有成功)。现在它保存、关闭、等待10秒重新打开,但随后立即关闭。

    Sub CloseMe()
    Application.OnTime Now + TimeValue("00:00:10"), "OpenMe"
    ThisWorkbook.Close True
    End Sub
    
    Sub OpenMe()
    Application.OnTime Now + TimeValue("00:10:00"), "OpenMe"
    ThisWorkbook.Close True
    End Sub
    

    我需要代码来保存,关闭,等待10秒重新打开,保持打开10分钟(收集实时数据),然后重复这个过程(直到我手动中断它来停止)。谢谢

    3 回复  |  直到 7 年前
        1
  •  1
  •   Excelosaurus    7 年前

    代码按照您的要求执行:a。 CloseMe 时间表 OpenMe 从现在起10秒钟内,关闭工作簿,然后b.excel重新打开工作簿并调用 开放式管理系统 ,哪个时间表 它本身 10分钟后,立即关闭工作簿,10分钟后Excel将在b 10分钟后循环恢复。

    我的理解是您的代码必须在 开放式管理系统 或 闭锁 ,因此您不希望只是安排一个呼叫并关闭工作簿。此外,要循环,一个子项需要调度另一个子项。从广义上讲,你可以这样做:

    Sub CloseMe()
        'Here, do whatever (if anything) must be done just before saving the workbook.
        '...
    
        'Schedule the OpenMe execution in 10 seconds.
        'I don't understand why you need to close the workbook, but that's not the question.
        Application.OnTime Now + TimeValue("00:00:10"), "OpenMe"
        ThisWorkbook.Close True
    End Sub
    
    Sub OpenMe()
        'Here, do whatever (if anything) must be done just as the workbook opens.
        '...
    
        'Schedule the CloseMe execution in 10 minutes.
        Application.OnTime Now + TimeValue("00:10:00"), "CloseMe"
    End Sub
    
        2
  •  0
  •   Knute    7 年前

    您正在为open和close sub调用openme sub。

    如果您想让它自动运行,除了命令按钮,close sub在哪里被调用?

        3
  •  0
  •   mjac    7 年前

    @我们非常亲近。感谢您在不同的订阅服务器上合理地解释这一点。这是完整的代码。它可以工作,但我的时间戳在记录、关闭和重新打开时翻了一番。我正在捕获一些RTD,为了让RTD刷新,您需要打开和关闭工作簿。我试着插进去 ActiveWorkbook.ForceFullCalculation = True 为了避免额外的打开/关闭子组件,但RTD没有使用此组件重新计算,因此唯一的方法是运行打开/关闭子组件。

    Dim NextTime As Double
    Sub RecordData()
    Dim Interval As Double
    Dim cel As Range, Capture As Range
    Application.StatusBar = "Recording Started"
    Set Capture = Worksheets("Dashboard").Range("C5:K5") 'Capture this row of data
    With Worksheets("Journal") 'Record the data on this worksheet
    Set cel = .Range("A2") 'First timestamp goes here
    Set cel = .Cells(.Rows.Count, cel.Column).End(xlUp).Offset(1, 0)
    cel.Value = Now
    cel.Offset(0, 1).Resize(1, Capture.Cells.Count).Value = Capture.Value
    End With
    NextTime = Now + TimeValue("00:01:00")
    Application.OnTime NextTime, "RecordData"
    End Sub
    
    Sub StopRecordingData()
    Application.StatusBar = "Recording Stopped"
    On Error Resume Next
    Application.OnTime NextTime, "OpenMe", , False
    On Error GoTo 0
    End Sub
    
    Sub OpenMe()
    Call RecordData
    Application.OnTime Now + TimeValue("00:10:00"), "CloseMe"
    End Sub
    
    Sub CloseMe()
    Application.OnTime Now + TimeValue("00:00:10"), "OpenMe"
    ThisWorkbook.Close True
    End Sub
    
    推荐文章