【问题标题】:Automatically run macro daily without opening any workbooks每天自动运行宏,无需打开任何工作簿
【发布时间】:2018-11-09 17:28:26
【问题描述】:

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

【问题讨论】:

标签: excel vba


【解决方案1】:

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

【讨论】:

  • 好的,谢谢,这很有帮助。我会尝试自己设置,如果在设置过程中有任何问题,我会参考这个帖子。
  • 我实际上确实有一个重要的后续问题:我的计算机是否必须打开(而不是处于睡眠模式或关闭)才能运行计划的宏?
  • 我更喜欢 linux,所以我知道在 linux 中,如果错过了 cronjob,计算机将在唤醒时运行它们。因此,一旦启动计算机,您可能会受到打击,但是是的,计算机必须以一种或另一种方式打开才能运行。根据宏的性质和重要性,如果您将其用于工作,您可能能够查看是否有办法从另一台始终开启的机器上执行它。
  • 您好,我有几个基本问​​题:1) 我是否可以将第一个脚本放在带有subend sub 的空白工作簿中? 2)第二个脚本也会如此,我会从第一个脚本创建计划任务吗?如果是这样,文本文件的意义是什么?谢谢,只是想确保我了解正在发生的事情。
  • 稍微编辑了我的答案,但您只需将脚本放入.vbs 文件并安排您的系统在您希望它运行时运行它。对于这部分,我会查阅网络以了解如何在您的系统上执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多