Рабочая книга, Сохранить, Закрыть, Повторно открыть (с TimeValue), Повторить

Вы имеете в виду что-то вроде этого

List.Where(x => x.Amount>0).OrderBy(x => x.Id).FirstOrDefault()?.Amount += (item1- item2);
1
задан mjac 19 January 2019 в 23:04
поделиться

3 ответа

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

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

0
ответ дан Knute 19 January 2019 в 23:04
поделиться

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

Насколько я понимаю, ваш код должен что-то выполнять в 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
ответ дан Excelosaurus 19 January 2019 в 23:04
поделиться

@Excelosaurus мы очень близки. Спасибо, что объяснили это логически на разных подводных лодках. Вот полный код. Это работает, но мои временные метки удваиваются, когда он записывает, закрывает и & amp; повторное открытие. Я записываю некоторые 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
ответ дан mjac 19 January 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: