1. 程式人生 > >AutoHotkey使用Excel的Com對象可能導致進程殘留問題的原因及解決方案

AutoHotkey使用Excel的Com對象可能導致進程殘留問題的原因及解決方案

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對象可能導致進程殘留問題的原因及解決方案