如何用vba判断是否打开了excel应用程序?

如何在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%准吗?不一定,有一种情况会失效,公众号评论区讨论下,是什么情况呢?

       

仅有1条评论 发表评论

  1. 11111111 /

    1111111111

发表评论