Het vinden van andere gevallen van Excel in een Macro

Als u een VBA-programma uit te voeren vanuit een bepaald exemplaar van Excel, kunt u andere exemplaren van Excel, geopend creëren en werkboeken te wijzigen in de nieuwe instances, en sluit die gevallen. Echter, kan je je afvragen hoe je kan bepalen, binnen een macro, als er andere gevallen van Excel al actief zijn, en zo ja, de controle van die gevallen.

Er zijn een paar manieren waarop u kunt gaan over dit te doen. Als je gewoon wilt weten hoeveel exemplaren van Excel worden uitgevoerd, kunt u een macro die gebruik maken van de Windows API maakt gebruik. De volgende functie implementeert deze aanpak:

Openbare Declare Function GetDesktopWindow Lib "user32" () As Long
Openbare Declare Function FindWindowEx Lib "user32" Alias ​​_
"FindWindowExA" (ByVal hWnd1 zoals lang, ByVal
hWnd2 zoals lang, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Functie ExcelInstances () As Long
Dim hWndDesk As Long
Dim hWndXL As Long

'Hier krijg je een handvat om de desktop
hWndDesk = GetDesktopWindow

Doen
'Krijg de volgende Excel-venster
hWndXL = FindWindowEx (GetDesktopWindow, hWndXL, _
"XLMAIN", vbNullString)

'Als we één, verhogen de telling
Als hWndXL> 0 Then
ExcelInstances = ExcelInstances + 1
End If

'Loop totdat we hebben ze allemaal gevonden
Loop Tot hWndXL = 0
End Function

Deze code werd ontwikkeld door Excel MVP Stephen Bullen. Het zal natuurlijk niet toestaan ​​dat u toegang tot de individuele gevallen van Excel; het alleen resultaten een telling van het aantal gevallen geopend. Als u wilt code om de gevallen gebruik te ontwikkelen, dan heb je niet hoeft te vertrouwen op de Windows API. U kunt, in plaats daarvan, gebruiken code zoals de volgende om te bepalen of een instantie van Excel is geopend:

Dim xlApp Zoals Excel.Application
Stel xlApp = GetObject ("Excel.Application")

Als een instantie is loopt u toegang hebt via de xlApp object. Indien een instantie niet wordt uitgevoerd wordt u een run-time error krijgen. De functie GetObject krijgt het eerste exemplaar van Excel die waren geladen. Om anderen te krijgen, kunt u sluiten dat één en probeer dan GetObject opnieuw om de volgende te krijgen, etc.

Als u wilt de xlApp ingesteld op een bepaald exemplaar van Excel, kunt u dit doen als u de naam van een open werkboek in dat geval weten:

Dim xlApp Zoals Excel.Application
Stel xlApp = GetObject ("ExampleBook"). Toepassing

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (9451) is van toepassing op Microsoft Excel 97, 2000, 2002 en 2003. U kunt een versie van deze tip voor de ribbon-interface van Excel (Excel 2007 en later) vindt u hier: Het vinden van andere voorbeelden van Excel in een Macro.