AutoHotkey使用Excel的Com對象可能導致進程殘留問題的原因及解決方案
阿新 • • 發佈:2019-03-26
sel 通用 this cat app 方便 com works pre
在AutoHotkey腳本中,對Excel的應用體驗很不錯,xl := ComObjActive("Excel.Application")就和當前Excel表連接了,
通過xl變量就能調用VBA代碼操作Excel,也能監視Excel事件,這種事件能對所有工作表都能效,通用性很好。
本人就是因為偷懶,聲明了Global xl,這樣在任何函數內都能直接使用,非常方便,
否則要麽是每個函數都需要多傳入xl參數,或者每個函數聲明為Global,這樣也能使用外面的變量,都不太理想。
直到近期,才發現聲明全局變量後,如果使用完沒有釋放xl,會導致Excel進程殘留。
解決方案:
- 繼續使用全局變量xl,每次使用後釋放xl。
- 規範代碼,每個函數都增加一個參數xl。
- 把Excel的函數都寫到Class內,每個函數都通過This.xl調用。
附上AutoHotkey監控Excel工作表事件代碼
st := ComObjActive("Excel.Application").Activesheet ;工作表必須賦值到變量 ComObjConnect(st, "st_") Return st_SelectionChange(Target) { ;事件函數內獲取Application可用 Target.Worksheet.Application ToolTip,% Target.Address }
AutoHotkey使用Excel的Com對象可能導致進程殘留問題的原因及解決方案