我对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
答案 0 :(得分: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
要对此进行测试,我在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
完成上述工作后,您应该能够在Windows中创建计划任务以运行脚本。