Avatar billede oleelo Nybegynder
15. september 2009 - 07:57 Der er 4 kommentarer og
1 løsning

Tølle antal excel applikationer der køre

Hej
Jeg ønsker at tælle antaller af excel applikationer der er åben, IKKE antallet af åbne regneark. Jeg skal bruge det i forbindelses med automtisk åbning og lukning af excel hvor det engang imellem ikke lykkes mig at lukke det forrige regneark/excel application ned.
mvh oleelo
Avatar billede stefanfuglsang Juniormester
15. september 2009 - 11:32 #1
du kan bruge windows api (virker ikke på mac)
I nedenstående vil count indeholde antallet af vinduer, der hedder noget med "Excel" (koden kan nok forbedres lidt):

Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Dim count As Integer
Private Sub Test()
    count = 0
    'call the Enumwindows-function
    EnumWindows AddressOf EnumWindowsProc, ByVal 0&
End Sub
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim WindowName As String, Ret As Long
    Ret = GetWindowTextLength(hwnd)
    WindowName = Space(Ret)
    GetWindowText hwnd, WindowName, Ret + 1
    If InStr(WindowName, "Excel") Then
        count = count + 1
    End If
    'continue enumeration
    EnumWindowsProc = True
End Function
Avatar billede oleelo Nybegynder
15. september 2009 - 14:09 #2
Hej
Tak for respons
Jeg har prøver at få koden til at virke, med uden held da det er sort for mig hvad der sker mht API.
Jeg har kopieret koden med i et excel kode modul og kørt ?Test  fra Immediate-windouet og der komme bare et linjeskift/tomme felter
Har desuden prøvet at tilføje en linje tilsidst i Test: Msgbox"Antal" & Count
Intet sker
Har du en ide til hvad der kan være galt , har excel 2003
mvh oleelo
Avatar billede stefanfuglsang Juniormester
15. september 2009 - 15:09 #3
Det virker i windows XP med Excel2000, men jeg har ikke her gjort noget med count-variablen. Prøv dette i stedet for:

Function antalexcel()
    count = 0
    'call the Enumwindows-function
    EnumWindows AddressOf EnumWindowsProc, ByVal 0&
    antalexcel = count
End Function

Du kan f.eks. indsætte formlen =antalexcel() i en celle i regnearket eller kalde den fra en VBA-procedure


Selve koden er ikke så kompliceret, EnumWindows sørger for at kalde EnumWindowsProc automatisk for hvert vindue, og i koden undersøger jeg navnet på vinduet. Hvis navnet indeholder "Excel" antager jeg at det er en Excel-applikation og lægger 1 til count
Avatar billede oleelo Nybegynder
15. september 2009 - 15:45 #4
Hej
Tak, nu virket det perfekt.  :-)
Send et svar så du kan få point
mvh oleelo
Avatar billede stefanfuglsang Juniormester
15. september 2009 - 16:42 #5
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester