Автоматически запускать макрос ежедневно, не открывая книг - PullRequest
0 голосов
/ 09 ноября 2018

Я все еще относительно новичок в VBA и не слишком опытен с методом Application.OnTime. Я просматривал несколько ресурсов и не вижу четкого способа автоматического запуска макроса ежедневно без открытия каких-либо книг (при условии, что я сначала запустил макрос в своей книге).

Возможно ли это? Я хотел бы быть более эффективным, чем запускать несколько макросов каждое утро.

Дайте мне знать, если вам нужна дополнительная информация, но мой код будет просто процессом копирования / вставки:

Sub MyMacro()
Application.ScreenUpdating = False

Dim OH As Workbook
Dim PO As Workbook


Set OH = Workbooks.Open("filepath")
Set PO = Workbooks.Open("filepath2")

'clear sheet
ThisWorkbook.Sheets("OH").Range("A2:O10000").ClearContents
'clear other sheet
ThisWorkbook.Sheets("OP").Range("A2:AG10000").ClearContents


'Paste new data
OH.Sheets("OH").Range("B3:P10000").Copy 
Destination:=ThisWorkbook.Sheets("OH").Range("A2")
PO.Sheets("OP").Range("A3:AG20000").Copy 
Destination:=ThisWorkbook.Sheets("OP").Range("A2")


OH.Close savechanges:=False
PO.Close savechanges:=False


'Refresh all pivot tables
Dim PT As PivotTable
Dim WST As Worksheet
    For Each WST In ThisWorkbook.Worksheets
    For Each PT In WST.PivotTables
        PT.RefreshTable
    Next PT
Next WST


'Clear last sheet
ThisWorkbook.Sheets("Pivot1 paste").Range("A6:E10000").ClearContents

ThisWorkbook.Sheets("Pivot1").Range("A6:D10000").Copy 
Destination:=ThisWorkbook.Sheets("Pivot1 paste").Range("A6")

'Paste variable column to last sheet
Dim cell As Range
For Each cell In ThisWorkbook.Sheets("Pivot1").Range("E3:AZ6")
    If cell.Value = "Out" Then cell.EntireColumn.Copy 
Destination:=ThisWorkbook.Sheets("Pivot1 paste").Columns(5)
Next

'Save with current date and close
ThisWorkbook.SaveAs ("TargetFilepath") 
& ".xlsm")
ThisWorkbook.Close


Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 09 ноября 2018

VBA предназначен для работы в Microsoft Office, но вы можете использовать VB Script, чтобы открыть книгу и запустить макрос.

Поместите следующее в .vbs файл. Вы создадите расписание для вызова и выполнения этого файла. Убедитесь, что вы указали правильный путь и измените "test.xlsm!mymacro" на название вашей рабочей книги и макрос, который вы хотите вызвать.

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\path\to\test.xlsm")

objExcel.Application.Run "test.xlsm!mymacro"
objExcel.ActiveWorkbook.Close

objExcel.Application.Quit
WScript.Echo "Finished."
WScript.Quit

Чтобы проверить это, я создал быстрый макрос в test.xlsm, чтобы создать текстовый файл в том же каталоге, и убедился, что он был там после того, как я запустил VB Script. В макросе ниже нет ничего особенного, вы можете вызывать любой макрос по вашему желанию. Это избавит вас от необходимости вручную открывать книгу и запускать макрос.

Sub mymacro()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim oFile As Object
    Set oFile = fso.CreateTextFile("C:\Users\bcohan\Downloads\testing.txt")

    oFile.WriteLine "test"
    oFile.Close

    Set fso = Nothing
    Set oFile = Nothing
End Sub

После того, как вы выполнили вышеуказанное, вы сможете создать запланированное задание в Windows для запуска вашего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...