在如何在word、ppt中用vba获取已经打开的excel应用程序对象?一文中我介绍了如何通过GetObject函数引用已经打开的Excel应用程序。
有老铁私信说如果能先判断是否打开了Excel应用程序就更好了。
能做吗?可以的
要判断是否当前打开了了excel应用程序?可以借助API来实现。
代码如下:
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub 水星Excel() '作者QQ:1722187970,微信:xycgenius,微信公众号:水星excel '用 FindWindow获得excel应用程序句柄 i = FindWindow("XLMAIN", vbNullString) If i = 0 Then MsgBox "Excel应用程序没有启动" Else MsgBox "你已经打开了Excel" End If End Sub
这是什么原理呢?
每个Windows应用程序都归属于一个对应的类,这个类不是类模块的类,其中“XLMAIN”就是Excel应用程序对应的类名。
通过用FindWindow查找这个类名,可以找到是否打开了有Excel应用程序,如果打开了,会返回对应的Excel应用程序窗口的句柄。如果没有打开,则返回0。
这个方法100%准吗?不一定,有一种情况会失效,公众号评论区讨论下,是什么情况呢?
1111111111