2017-06-16 91 views
-1

假設我有一個名爲trigger.xlsm的工作簿,該工作簿存儲了一個宏,該宏可以遍歷trigger.xlsm所在的同一目錄下的所有其他工作簿,並以某種方式進行轉換。如何在不打開工作簿的情況下運行存儲在工作簿中的VBA宏?

我絕對可以打開trigger.xlsm,並運行宏。但我覺得沒有必要先打開trigger.xlsm。我可以在不打開trigger.xlsm的情況下運行宏嗎?或者,也許我可以將trigger.xlsm更改爲trigger.exe文件,只需單擊trigger.exe文件?

如果我必須解決任何其他編程語言(如Python)(我更喜歡Python)才能完成此任務,那麼建議使用哪種第三方軟件包?

順便說一句,這是一個關於自動化設計的問題,如果您有其他想法而不是使用.exe文件,也請隨時告訴我!

+1

如果你把代碼放在你的personal.xlsb中,它不會爲你做這項工作嗎?如果代碼被多個用戶使用,它不會是解決方案 – Ibo

+1

從您的問題和對某人回答的評論中,您聽起來像要運行沒有任何Excel應用程序對象的Excel宏?那是對的嗎? – YowE3K

+1

你可以創建一個VBS文件並讓Windows調度器爲你運行它,如果不是你自己的話 – Ibo

回答

0

通過Excel而不創建exe的一種方法是創建Office.Interop加載項。有一個startup事件,您可以參考VBA代碼並執行Run("nameOfYourMacro")

如果你正在尋找一個python替代品here's the same question。我特別喜歡Parfait Gasana在那裏的回答,可能對你最有利。

+0

請注意,我不想啓動Excel,我只是不需要打開任何Excel來運行宏。 – Nicholas

+0

第二個選項基本上等於運行'exe',但你可以保留你的代碼。否則,我會說如果你不想用Excel創建一個'exe' ... *然後*如果你要使用'Office.Interop'庫編輯文檔,你可能會打開Excel,因爲無論如何,這些庫將創建一個Excel實例。在這點上,其他第三方庫的速度會更快,但如果性能是關鍵的話,您將不得不更改所有代碼。 – GibralterTop

+0

在您的文章中,它聽起來像是您不想打開'.xlsm',抱歉讓您感到困惑。 – GibralterTop

0

假設你在Workbook_Open()事件中有你的宏。您可以使用此代碼打開該工作簿。

Set objExcel = CreateObject("Excel.Application") 
    objExcel.Visible = true 

'<~assuming the file to be opened is in the same folder 
Set fso = CreateObject("Scripting.FileSystemObject") 
objpath = fso.GetParentFolderName(wscript.ScriptFullName) & "\[NameOfWorkbook].xlsx" 
Set objWorkbook = objExcel.Workbooks.Open(objpath) 

在記事本中粘貼此並保存(在同一個文件夾作爲工作簿)與.vbs文件擴展名。

相關問題