Рабочая книга, Сохранить, Закрыть, Повторно открыть (с TimeValue), Повторить - PullRequest
0 голосов
/ 19 января 2019

Макрос запускается с помощью кнопки, назначенной «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 ]

0 голосов
/ 22 января 2019

Код выполняет то, что вы просите: а. CloseMe планирует OpenMe на 10 секунд и закрывает книгу, затем b. Excel снова открывает рабочую книгу и вызывает OpenMe, который планирует сам на 10 минут, а затем немедленно переходит к закрытию книги, и, наконец, Excel возобновляет работу через 10 минут в цикле.

Насколько я понимаю, ваш код должен что-то выполнять в OpenMe или CloseMe, поэтому вы не хотите просто планировать вызов и закрывать книгу. Кроме того, для цикла один подпрограмма должен планировать другой. В общих чертах, вы могли бы пойти по этим направлениям:

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
0 голосов
/ 22 января 2019

@ Excelosaurus, мы очень близки.Спасибо, что объяснили это логически на разных подводных лодках.Вот полный код.Это работает, но мои временные метки удваиваются, когда он записывает, закрывает и снова открывает.Я записываю некоторые 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
0 голосов
/ 20 января 2019

Вы вызываете сабвуфер OpenMe для сабвуферов Open и Close.

Если вы хотите, чтобы это запускалось автоматически, где вызывается close sub, кроме командной кнопки?

...