每天自动运行宏而无需打开任何工作簿

use*_*843 2 excel vba excel-vba

我对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
Run Code Online (Sandbox Code Playgroud)

Coh*_*han 6

VBA可以在Microsoft Office中运行,但您可以利用VB脚本打开工作簿并运行宏.

将以下内容放在一个.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
Run Code Online (Sandbox Code Playgroud)

为了测试这个,我创建了一个快速宏test.xlsm来在同一目录中创建一个文本文件,并在运行VB脚本后验证它是否在那里.下面的宏没什么特别的,你可以调用你想要的任何宏.这将使您不必手动打开工作簿并运行宏.

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
Run Code Online (Sandbox Code Playgroud)

完成上述工作后,您应该能够在Windows中创建计划任务来运行脚本.