2012-01-18 267 views
9

我需要通過計劃任務在Excel電子表格中運行宏。 我定義瞭如下工作:如何通過計劃任務運行Excel宏

「C:\ Program Files文件\的Microsoft Office \ OFFICE10 \ EXCEL.EXE」 「」

的問題是,在作業開始時,Excel會顯示彈出並詢問我們是否要禁用/啓用阻止作業執行的宏。

如何運行此宏而無需手動點擊啓用宏?

+0

這可能有助於https://stackoverflow.com/questions/22771185/how-to-set-recurring-schedule-for-xlsm-file-using-windows-task - 程序員 – Justin 2018-01-18 03:45:35

回答

8

寫一個簡短的VBScript啓動Excel,加載您的工作簿,並使用Application.Run運行宏。讓您的計劃任務運行vbscript。

如:http://www.mrexcel.com/forum/showthread.php?t=302970

+0

+1最佳方法。值得重新編碼vbs中的宏以確保代碼運行,即擊敗啓用宏問題。 – brettdj 2012-01-19 03:40:15

+0

該腳本似乎可以正常工作,但不會阻止「啓用宏」提示。我認爲這可能與我在工作場所安裝的企業安全策略有關? – mek363 2016-12-08 03:58:36

0

您可以嘗試降低excel的安全級別,以避免在啓動excel時彈出此窗口。

3

您不指定在Windows 7旗艦什麼Excel或什麼的Windows(或Macintosh)的版本,所以我會指定我使用Excel 2010中從Office 32位版本64有點...


如果你要保持你的工作簿打開並運行代碼,在指定的時間,後來,那就試試這個..

將新代碼模塊插入到您的項目中 - 或者 - 使用您的項目中已有的模塊。

創建調度子程序,如下圖所示:

Sub Scheduler() 

'-- RUNS SUB(S) (OR FUNCTIONS) AT TIME SCHEDULED. 

    Application.OnTime TimeValue("11:46:40"), "TheScheduledSub" 

End Sub 

創建要運行一個子程序(或功能)。下面是一個用於本實施例中:

Sub TheScheduledSub() 

    Debug.Print "TheScheduledSub() has run at " & Time 

End Sub 

Scheduler()將在內部Scheduler()指定的確切時間,通過TimeValue定義執行TheScheduledSub()。你可以閱讀更多關於TimeValuehere

您可能可以傳遞您希望Scheduler()sub執行您的子或函數的時間值作爲子參數。

可以說,從現在開始你可能會運行一個小時5小時。 I.E. Application.OnTime Now + TimeValue(「05:00:00」),「TheScheduledSub」

或者從現在開始的一天?玩它。

我沒有得到兩個潛艇在不同的時間執行。我也試圖同時執行兩個。我同時執行兩個不同的子目錄的經驗是,第二個子目錄似乎在第一個子目錄之前執行,但我沒有充分探索它。所以YMMV。

我不認爲Excel VBA具有多線程功能,因此請牢記這一點。我正在從Office套件運行32位Excel 2010。不知道64位Office Excel的行爲或其他任何版本或平臺。無論如何,多線程/多任務處理Excel VBA不是你問的問題,而是需要考慮的問題。

看到這個問題,並玩上述我可以想到一些想法,我想嘗試自己!

0

您還可以使用工作簿打開並調用宏。只要有計劃的任務打開工作簿,宏將在工作簿打開時運行。

0

另外,我發現這是一個好主意,有

Application.DisplayAlerts = False

之初禁用運行時可能會中斷您的宏任何彈出消息。

還是看視頻教程: http://youtu.be/lFSgV2gym9g