Finne andre forekomster av Excel i en makro

December 9  by Eliza

Hvis du kjører en VBA-programmet fra innenfor en bestemt forekomst av Excel, kan du opprette andre forekomster av Excel, åpne og endre arbeidsbøker i de nyopprettede tilfeller, og deretter lukke disse forekomstene. Men kanskje du lurer på hvordan du kan bestemme, innenfor en makro, hvis andre forekomster av Excel er allerede i gang, og i så fall, ta kontroll over disse forekomstene.

Det er noen måter du kan gå om du gjør dette. Hvis du bare ønsker å vite hvor mange tilfeller av Excel kjører, kan du bruke en makro som gjør bruk av Windows API. Følgende funksjon implementerer denne tilnærmingen:

Offentlig Declare Function GetDesktopWindow Lib "User32" () Som Long
Offentlig Declare Function FindWindowEx Lib "User32" Alias ​​_
"FindWindowExA" (ByVal hWnd1 Som Long, ByVal
hWnd2 Som Long, ByVal lpsz1 As String, ByVal lpsz2 As String) så lenge

Funksjons ExcelInstances () Som Long
Dim hWndDesk Som Long
Dim hWndXL Som Long

"Få et håndtak til skrivebordet
hWndDesk = GetDesktopWindow

Gjøre
"Få den neste Excel-vinduet
hWndXL = FindWindowEx (GetDesktopWindow, hWndXL, _
"XLMAIN", vbNullString)

«Hvis vi har en, øke tellingen
Hvis hWndXL> 0 Then
ExcelInstances = ExcelInstances + 1
End If

'Loop inntil vi har funnet dem alle
Loop Inntil hWndXL = 0
End Function

Denne koden ble utviklet av Excel MVP Stephen Bullen. Det åpenbart ikke vil gi deg tilgang til de enkelte forekomster av Excel; det bare returnerer en telling av antall forekomster åpne. Hvis du ønsker å utvikle kode for å bruke forekomster, så du trenger ikke å stole på Windows API. Du kan i stedet bruke kode som følgende for å avgjøre om en forekomst av Excel er åpent:

Dim xlApp Som Excel.Application
Satt xlApp = GetObject ("Excel.Application")

Dersom en forekomst er i gang kan du få tilgang til det ved hjelp av xlApp objekt. Dersom en forekomst ikke kjører vil du få en kjøretidsfeil. Den GetObject funksjon blir den første forekomsten av Excel som hadde blitt lastet. For å komme til andre, kan du lukke det ene og deretter prøve GetObject igjen for å få den neste, osv

Hvis du ønsker å stille xlApp til en bestemt forekomst av Excel, kan du gjøre det hvis du vet navnet på en åpen arbeidsbok i dette tilfellet:

Dim xlApp Som Excel.Application
Satt xlApp = GetObject ("ExampleBook"). Søknad

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (9451) gjelder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Excel (Excel 2007 og senere) her: Finne andre forekomster av Excel i en makro.