Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何将ActiveDocument的句柄保存到变量?_Vba_Ms Word - Fatal编程技术网

Vba 如何将ActiveDocument的句柄保存到变量?

Vba 如何将ActiveDocument的句柄保存到变量?,vba,ms-word,Vba,Ms Word,如何在Microsoft Word中获取ActiveDocument的Windows句柄 我希望将句柄值保存到变量。您可以使用FindWindow函数在当前活动的word应用程序中获取窗口句柄: Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long MS Word的类名为“

如何在Microsoft Word中获取ActiveDocument的Windows句柄


我希望将句柄值保存到变量。

您可以使用FindWindow函数在当前活动的word应用程序中获取窗口句柄:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
MS Word的类名为“OpusApp”。如果只打开了一个Word应用程序,则以下操作将返回该窗口的句柄:

Public Function Test1()
Dim lhWnd As Long
lhWnd = FindWindow("OpusApp", vbNullString)
End Function
注意:当您有多个活动Word应用程序时,可以添加窗口标题的名称。例如,如果将其另存为“Stanigator.doc”,则标题应为“Stanigator-Microsoft Word”。因此:

另一个可能派上用场的API是:

Private Declare Function GetActiveWindow Lib "user32" () As Long
编辑:

我本打算推荐VSTO方法,但基于此链接,这似乎并不明智:

正如Tim Williams指出的那样,设置myDoc=ActiveDocument是一种方法,因此对于Word VBA来说,没有类似的方法可以设置ws=ActiveSheet?不幸的是,您必须使用Win32 API。我希望它像ActiveSheet.hWnd一样简单。另一个技巧是使用VisualStudio附带的Spy++验证结果。如果你没有,你可以试着放弃我的项目。那么,我也许可以让我的朋友用C#编写这个应用程序。真恶心。谢谢你的建议。我认为OP使用“手柄”这个词可能会引起一些混乱。我想他们只是想在VBA中获取对活动文档的引用,这非常简单。。。。
Private Declare Function GetActiveWindow Lib "user32" () As Long