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

标签 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

最佳答案

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 中创建计划任务来运行脚本。

关于excel - 每天自动运行宏,无需打开任何工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230625/

相关文章:

vba - 高级筛选条件可以在 VBA 中而不是范围中吗?

c# - 在解决方案资源管理器中将 Excel 文件添加到项目

vba - 如何检查Access表中是否存在值

使用格式(日期)函数保存文件时出现VBA错误

VBA - 分配给同一宏的多个复选框,如何确定哪个复选框触发事件?

excel - 如何在excel中的所有单元格中查找和替换部分公式

python - 使用python在excel中绘制一个带有条件的单元格

Excel:查找由第二列确定的范围内的第一个最小值

vba - 带有一个命名工作表的 Excel 宏 VBA 新工作簿

vba - Excel VBA代码导致崩溃-未知原因