2014-09-18 5 views
0

Я пытаюсь запланировать задачу в планировщике задач Window, которая открывает файл excel и автоматически запускает макрос в нем.остановить задачу от запуска при открытии файла

Макро-часть выполняется, но одна проблема заключается в том, что файл уже открыт и запускается запланированное задание. Всякий раз, когда это происходит, он спрашивает вас, хотите ли вы снова открыть файл, если я случайно нажму «да», что на самом деле произошло, тогда данные, над которыми я работал, исчезнут.

Так что я хочу, чтобы задача не запускалась, когда файл открыт. Нужно ли мне запускать скрипт? создать командный файл с кодом? Если возможно, вы можете предоставить мне код, который может это сделать, поскольку я не знаком с другим языком, кроме VBA

Примечание. Чтобы уточнить, у меня есть файл, который постоянно вытаскивает форму данных Live Bloomberg. Что я хочу сделать, так это сохранить его в качестве другой книги для справки каждый день в 16:30. Существует несколько проблем. Вот как то, что я написал в ThisWorkbook для лучшего понимания того, что я хочу сделать

Private Sub Workbook_Open() 
    Application.OnTime TimeValue("16:30:00"), "MyMacro" 
End Sub 

1) Если я не открывал, что преуспеть в тот день, Workbook_Open() просто не будет работать.

2) Даже если бы я сделал открыть Excel, если закрыть Excel до того 4:30 макрос не будет работать

Так что я хочу это иметь окна планировщик задач постоянно открывать файл первенствовать для меня это всегда будет работать вовремя, независимо от того, что произойдет.

Есть и другие проблемы. Я всегда пишу комментарии и материал в Live Data File, поэтому, если Task Scheduler пытается открыть файл данных, который, в свою очередь, активирует Workbook_Open(), когда я его использую, появится всплывающее окно с вопросом, хочу ли я снова открыть файл. Конечно, мне просто нужно нажать «нет», тогда задача остановится, и все будет в порядке. Но что, если бы я не был там, чтобы нажать кнопку? Также в некоторых случаях я случайно нажимаю «да», который уничтожил все комментарии, которые я написал.

Поэтому я хотел спросить, что если Live Data File уже открыт, просто сделайте так, чтобы задача в планировщике задач не запускалась.

ответ

0

Прежде всего спасибо Стиву S за ваш ввод.

Я уже сделал обходное решение. Вместо того, чтобы иметь файл LiveData для запуска макроса, я помещал макрос в чистый шаблон excel и вместо этого планировал расписание задач. Этот способ намного надежнее и пропускает все функции «Scripting in task scheduler».

Вот мой обновленный код:

'In ThisWorkbook 
Public Sub Workbook_Open() 
    Run "AutoSaveAs" 
End Sub 


'In Module1 
Public Sub AutoSaveAs() 
    Application.ScreenUpdating = False 

    Dim LDSP As String 
    Dim IsOTF 
    Dim LDS, TWB As Workbook 

    'Set LiveDealSheet file path 
    'Check if LiveDealSheet is already open 
    LDSP = "I:\LiveDealSheet\LiveDealSheet.xlsm" 
    IsOTF = IsWorkBookOpen(LDSP) 

    'Set quick workbook shortcut 
    Set TWB = ThisWorkbook 
    If IsOTF = False Then 
     Set LDS = Workbooks.Open(LDSP) 
    Else 
     Workbooks("LiveDealSheet.xlsm").Activate 
     Set LDS = ActiveWorkbook 
    End If 

    'Copy all data from LIVE Deals to TWB 
    LDS.Sheets("LIVE Deals").Cells.Select 
    Selection.Copy 
    TWB.Sheets(1).Cells.PasteSpecial (xlValues) 
    TWB.Sheets(1).Cells.PasteSpecial (xlFormats) 


    TWB.SaveAs FileName:="I:\LiveDealSheet\" & Format(Date, "yyyymmdd") & " LiveDealSheet", FileFormat:=52 

    If IsOTF = False Then 
     LDS.Close False 
     TWB.Close False 
    Else 
     TWB.Close False 
    End If 

    Application.ScreenUpdating = True 
End Sub 

Function IsWorkBookOpen(FileName As String) 
    Dim ff As Long, ErrNo As Long 

    On Error Resume Next 
    ff = FreeFile() 
    Open FileName For Input Lock Read As #ff 
    Close ff 
    ErrNo = Err 
    On Error GoTo 0 

    Select Case ErrNo 
    Case 0: IsWorkBookOpen = False 
    Case 70: IsWorkBookOpen = True 
    Case Else: Error ErrNo 
    End Select 
End Function 
0

Считаете ли вы использование Workbook.ReadOnly Property? Это точно не скажет вам, открыт ли файл, но он скажет вам, есть ли у вас доступ на запись. Попытка:

Public Sub OnlyRunWithWriteAccess() 
    Dim oBook As Workbook 
    Set oBook = Application.ActiveWorkbook 

    If Not oBook.ReadOnly Then 
     'Your processing code goes here... 
    End If 
    Set oBook = Nothing 

End Sub 
Смежные вопросы