为什么用 AutoHotkey 而不是 VBA 来操作 Excel

  • 生效范围

    • VBA 作用范围当前文件,其他文件要用同功能 VBA,要重新复制代码部署
    • ☑ AutoHotkey 运行后,对任何 Excel 文件都可直接使用
  • 语法

    • VBA 语法陈旧,加上不熟悉,写起来很不友好
    • ☑ AutoHotkey 语法简单,写起来很方便
  • 代码管理

    • ☑ VBA 可以内置到 Excel 文件,对处理单文件功能来说,比较方便。文件多了,每个都要维护VBA代码,就很不方便了
    • AutoHotkey 需要单独运行程序,但代码可以统一维护,文件数多就更有优势了。
  • 执行功能

    • VBA 可以点击控件或简易热键执行
    • AutoHotkey 可以用自定义热键(自定义)或鼠标手势执行

附上 AutoHotkey v2-beta 获取 xl 对象的函数

ox(winTitle:="ahk_class XLMAIN") {
    if WinExist(winTitle)
        ctlID := ControlGetHwnd("EXCEL71")
    else
        return ComObject("Excel.application")
    numput('Int64',0x20400, 'Int64',0x46000000000000C0, IID_IDispatch:=buffer(16))
    dllcall("oleacc\AccessibleObjectFromWindow", "ptr",ctlID, "uint",0xFFFFFFF0, "ptr",IID_IDispatch, "ptr*",win:=ComValue(9,0), 'HRESULT')
    loop {
        try
            return win.application
        catch
            ControlSend("{escape}", "EXCEL71")
    }
}
posted @ 2021-10-31 13:30  火冷  阅读(954)  评论(1编辑  收藏  举报