2016-04-06 17 views
0

Excel'in çalışıp çalışmadığını öğrenmeye çalışıyorum çünkü excel dosyaları oluşturmayı bitirdikten sonra excel'i kapatıp kapatmamam gerektiğini bilmem gerekiyor.Excel çalışmakta olup olmadığını öğrenin

Benim yöntemim benim için iyi çalışıyor, ancak başka bir kullanıcıda başarısız oluyor ve neden başarısız olduğunu bilmiyorum. Bahse girerim, while döngüsünün sonsuza dek sürecek olması. Bundan kaçınmak için bir sayaç ekleyelim mi yoksa Excel'in çalışıp çalışmadığını öğrenmenin daha iyi bir yolu var mı? Yani burada

Function ListWins(Optional title = "*", Optional Class = "*") As Boolean 
    Dim hWndThis As Long 
    ListWins = True 
    hWndThis = FindWindow(vbNullString, vbNullString) 
    While hWndThis 
     Dim sTitle As String, sClass As String 
     sTitle = Space$(255) 
     sTitle = Left$(sTitle, GetWindowText(hWndThis, sTitle, Len(sTitle))) 
     sClass = Space$(255) 
     sClass = Left$(sClass, GetClassName(hWndThis, sClass, Len(sClass))) 
     If sTitle Like title And sClass Like Class Then 
      ListWins = False 
      Debug.Print sTitle, sClass 
     End If 
     hWndThis = GetWindow(hWndThis, GW_HWNDNEXT) 
    Wend 
End Function 
+1

olanlar Win32 API çağrıları, 32-bit ve 64-bit Office yüklemelerinin için farklı ithal edilmek zorunda (User32 ...?) . Belki de bu iki bilgisayar arasındaki farkı açıklar. Bkz. [This] (http://stackoverflow.com/questions/29723694/excel-2013-windows-class-names/29724663#29724663). – Jeeped

+0

Teşekkürler, ikimizin de 32bit versiyonunu kullanıyoruz ama 32 bit pc kullanıyor ve 64bit pc kullanıyoruz. – skatun

+1

Sadece FWIW: GetObject (, "Excel.Application") kullanabilirsiniz ve bu hatalar (429, hatırladığım gibi) çalışmıyorsa. –

cevap

0

benim için çalışan yeni fonksiyondur:

#If VBA7 Then 
    Private Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (_ 
    ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr 
#Else 
    Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (_ 
    ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
#End If 

Function ExcelOpen() As Boolean 
    ExcelOpen = FindWindow("XLMAIN", vbNullString) 
End Function 
İlgili konular