用GetObject,如出错,则没启动。

解决方案 »

  1.   

    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
        ByVal lpWindowName As Long) As LongPublic Sub ExistExcel()
    Dim hwnd As Longhwnd = FindWindow("XLMAIN", 0)
    If hwnd <> 0 Then   '<>0 表示有 Excel 在运行。
        msgbox "Excel 在运行!"
    end ifend sub
      

  2.   

    On Error Resume Next
     Set objexcel = GetObject(, "Excel.Application")If Err.Number <> 0 Then
      SetXobjexcel = New Excel.Application
    End If
      Err.Clear
    Set objworkbook = Xobjexcel.Workbooks.Add
    Set objworksheet = Xobjworkbook.Worksheets.Add
    很遗憾的讲,我的上面的很不稳定 ,常常有其他程序忙什么的提示,
    用API哪个的可能好些!!!
      

  3.   

    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
        
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
        ByVal hWnd As Long, _
        ByVal wMsg As Long, _
        ByVal wParam As Long, _
        lParam As Any) As Long
        Dim ExcelhWnd As Long
        Dim aStr As String ''说明:不能用 0 值代替 aStr 变量。
        On Error Resume Next
        ExcelhWnd = FindWindow("Xlmain", aStr)  ''调用 API 查找 Excel 是否在运行,是则返回非 0 值
        If ExcelhWnd = 0 Then
                Set FromExcel = CreateObject("Excel.Application") ''重新调用
                If Err.Number <> 0 Then  ''出错,本机没有安装EXCEL
                    MsgBox "本机没有安装 Microsoft Excel," + vbCrLf + _
                           "或由于其它原因 Microsoft Excel 不能正常启动!", vbOKOnly, "错误警告!"
                    Set FromExcel = Nothing
                    Exit Function
                End If
            Else
                l = SendMessage(ExcelhWnd, WM_USER + 18, 0, 0) ''如果Excel正在运行则调用 API 将其放入运行对象表
                ''注意:返回 0,不知道 SendMessage 函数有没有成功运行。
                Set FromExcel = GetObject(, "Excel.Application")
        End If