Прерывать работу (в любых активных файлах) для запуска макроса каждые x минут - Excel VBA

У меня есть макрос, который должен запускаться каждые x минут, чтобы сохранить текущий файл в указанном месте. Я использовал эту ссылку, чтобы написать код -> Стиль VBA Macro On Timer для запуска кода каждые заданное количество секунд, т.е. 120 секунд

Однако макрос срабатывает, когда открыт другой файл Excel, и кто-то работает над ним.

Есть ли способ прервать текущую операцию пользователя и сообщить ему об этом с помощью окна сообщения или чего-то еще, чтобы макрос мог продолжить работу?

Dim TimeToRun, k, RDNum, DestinationFolderName, MasterFile, TestCellNum

Sub ScheduleIt()
    TimeToRun = Now + TimeValue("00:00:10")
    Application.OnTime TimeToRun, "CopyPriceOver"
End Sub

Sub CopyPriceOver()
    Windows(MasterFile).Activate
    Worksheets("Save Log").Activate

    dt = Format(CStr(Now), "mm-dd-yyyy hh-mm-ss")
    MasterFileName = DestinationFolderName & "RD" & RDNum & " " & TestCellNum & " " & dt & ".xlsb"
    ActiveWorkbook.SaveAs Filename:=MasterFileName, FileFormat:=xlExcel12, CreateBackup:=False

    Call ScheduleIt
End Sub
Sub AutoOpen()
    k = 1
    Worksheets("Test Header").Activate
    RDNum = Range("C4").Value
    LR = Cells(Rows.Count, "I").End(xlUp).Row 'Sets the last row
    TestCellNum = Cells(LR, "I").Value
    DestinationFolderName = "\\C:\Directory\"
    MasterFile = ThisWorkbook.Name

    Call ScheduleIt
End Sub

Sub AutoClose()
    Application.OnTime TimeToRun, "CopyPriceOver", , False
End Sub

person WonderWoman    schedule 12.11.2013    source источник
comment
Я не вижу никакого кода в этом посте. Что вы пробовали, что не работает до сих пор?   -  person Parrish Husband    schedule 13.11.2013


Ответы (1)


Убедитесь, что предполагаемая рабочая книга активирована, поэтому действие сохранения выполняется только для этой рабочей книги:

Public Sub OnTimeCallback()
    If ActiveWorkbook.Name = "MyWorkbook.xlsm" Then
        Debug.Print "Save some stuff"
    End If
    alertTime = Now + TimeValue("00:0:02")
    Application.OnTime alertTime, "OnTimeCallback"
End Sub

Лучшим решением было бы деактивировать таймер, пока активна другая книга, используя события Workbook_Activate/Workbook_Deactivate.

person Wolfgang Kuehn    schedule 12.11.2013