每天自动运行宏,不打开任何工作簿



我对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

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

将以下内容放入.vbs文件中。您将创建一个时间表来调用和执行此文件。请确保设置了正确的路径,并将"test.xlsm!mymacro"编辑为工作簿和要调用的宏的名称。

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:pathtotest.xlsm")
objExcel.Application.Run "test.xlsm!mymacro"
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
WScript.Echo "Finished."
WScript.Quit

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

Sub mymacro()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
Set oFile = fso.CreateTextFile("C:UsersbcohanDownloadstesting.txt")
oFile.WriteLine "test"
oFile.Close
Set fso = Nothing
Set oFile = Nothing
End Sub

完成上述操作后,您应该能够在windows中创建一个计划任务来运行脚本。

最新更新