autohotkey: 运行 vba 带有 ahk 脚本的宏

autohotkey: Run vba macro with ahk script

    #Include Com.ahk            ; COM
        RunMSWordMacro(correct)
        {
            COM_Init()
            Word := COM_GetActiveObject("Word.Application")
            COM_Invoke(Word, "Run", "!"correct)
            COM_Release(Word)
            COM_Term()
        }

        ;    the hotkey is 1
    1::RunMSWordMacro("correct")

为什么这段代码不起作用?看图"message",帮帮我 拜托,我是 autohotkey 的新用户。

当我按下热键时,它给了我这条消息:

这是我的 vba 代码:

谢谢 David Metcalfe,这是我的 vba 代码:

Sub correct()
'
' correct Macro
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "p "
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute
    Selection.TypeText Text:="o "
End Sub

如果您解释代码的最终目标是什么,将会有所帮助。根据您提供的 VBA,您似乎只是想 运行 Microsoft Word,在这种情况下您可以完全使用 AutoHotkey。

Run 语法使用起来非常简单。

Run, C:\Path\to\Microsoft Word.exe

来自这里的帮助: [https://autohotkey.com/boards/viewtopic.php?f=5&t=37197&e=1&view=unread#unread][1]

   1:: RunMSWordMacro("correct")

    RunMSWordMacro(name)  {
       GetWord().Run(name)
    }

    GetWord()  {
       if !hwnd := WinActive("ahk_class OpusApp")
          hwnd := WinExist("ahk_class OpusApp")
       ControlGet, ControlHwnd, Hwnd,, _WwG1, ahk_id %hwnd%
       Return AccObjectFromWindow(ControlHwnd, -16).Application
    }

    AccObjectFromWindow(hWnd, idObject = 0)
    {
       static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
            , IID_IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}"
            , OBJID_NATIVEOM := 0xFFFFFFF0, VT_DISPATCH := 9, h := DllCall("LoadLibrary", Str, "oleacc", Ptr)

       VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
       DllCall("ole32\CLSIDFromString", Str, idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, Ptr, &IID)
       if DllCall("oleacc\AccessibleObjectFromWindow", Ptr, hWnd, UInt, idObject, Ptr, &IID, PtrP, pAcc) = 0
          Return ComObjEnwrap(VT_DISPATCH, pAcc, 1)
    }