excel - 每天自动运行宏,无需打开任何工作簿
问题描述
我对 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:\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 中创建计划任务来运行您的脚本。
推荐阅读
- html - 从 web html 上显示的 postgreSQL 数据库获取数据节点 js 时出错
- docker - Nginx 反向代理想要使用虚拟目录进行重定向
- python - 是否有将列表转换为函数的内置方法?
- amazon-web-services - Kinesis 是否保证交货?
- python - Django 的 GEOS API 中的几何交集不再起作用
- cloud - Terraform:云存储失败:存储:存储桶不存在
- reactjs - 禁用密码输入中的黄色框反应本机
- excel - 避免在 Excel 工作表中打印空视图/区域
- python - 从 Pandas 的列中删除错误值
- java - Java - 返回多种返回类型