Ms word 自动热键:使用ahk脚本运行vba宏

Ms word 自动热键:使用ahk脚本运行vba宏,ms-word,autohotkey,Ms Word,Autohotkey,为什么这个代码不起作用?请看图片“留言”,并帮助我 请,我是自动热键的新用户 当我按下热键时,它给了我以下信息: 这是我的vba代码: #Include Com.ahk ; COM RunMSWordMacro(correct) { COM_Init() Word := COM_GetActiveObject("Word.Application") COM_In

为什么这个代码不起作用?请看图片“留言”,并帮助我 请,我是自动热键的新用户

当我按下热键时,它给了我以下信息:

这是我的vba代码:

    #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")
感谢David Metcalfe,这是我的vba代码:

    #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")

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

语法使用起来非常简单

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
这里的帮助: [


你应该问一个问题。发布代码而不告诉我们出了什么问题以及你试图做什么几乎是没有用的。你的问题和给我们一些细节。我不只是想运行Microsoft Word,我发送了一个vba代码,我想用AHK运行它,请帮助。@asad41163你提供的代码在演示方面没有任何更好的效果这是您试图实现的核心目标。您告诉我们的是,您希望通过AHK运行VBA代码,但您没有找到“为什么”。通常情况下,最终目标可以通过更好的方法实现,我们过于专注于单一的解决方案。首先,请原谅我不要掌握语言;其次,请原谅,第二部分中提到的VBA代码上面的例子只是一个非常简单的例子,我正在修改Word程序的书籍,我非常需要宏,只要宏由一个热键运行,例如a:,b:,t:,等等。所以我想利用Word程序在搜索和替换中的各种可能性,并从a中获益单键中的自动热键。请帮助me@asad41163如果要查找和替换,只需使用F5、Alt+P或
SendInput、{F5}!P
。很抱歉,解决方案是:
   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)
    }