| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: auf 2 offene Excel-Sitzungen zugreifen? (509 / mal gelesen)
|
Christian-67 Mitglied Entwicklungsingenieur
 
 Beiträge: 103 Registriert: 14.06.2006 DELL - Precision 7540 Windows 10 Inventor 2022
|
erstellt am: 28. Jun. 2024 15:32 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, Wie kann ich auf zwei offene Excel-Sitzungen zugreifen? Bisher habe ich immer die aktive Excel-Sitzung verwendet, aber jetzt muss ich auf zwei verschiedene Excel-Sitzungen zugreifen. Ich verwende dazu: Dim exapp As excel.Application Set exapp = GetObject(, "Excel.Application") 'Aktives Workbook holen Dim workbook As excel.workbook Set workbook = exapp.ActiveWorkbook Aktives Blatt holen Dim oSheet As excel.WorkSheet Set oSheet = workbook.ActiveSheet Ich habe das "exapp"-Objekt durchsucht, aber habe nichts gefunden, was mir erlaubt, auf andere offene Excel-Sitzungen zuzugreifen! Kann mir jemand helfen? Vielen Dank, ------------------ Gruß Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2788 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 28. Jun. 2024 20:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Christian-67
Moin Sicher das deine WorkBooks in verschiedenen Instanzen geöffnet werden? Das Standardverhalten wäre es nicht. Aus dem Artikel hier habe ich den Code zusammengestückelt. Der liefert dir eine Liste der Instanzen und darin kannst du deine Dokumente finden. Code:
Option Explicit Private Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" ( _ ByVal hwnd As LongPtr, ByVal dwId As Long, riid As Any, ppvObject As Object) As Long Private Declare PtrSafe Function FindWindowExA Lib "user32" ( _ ByVal hwndParent As LongPtr, ByVal hwndChildAfter As LongPtr, _ ByVal lpszClass As String, ByVal lpszWindow As String) As LongPtr Sub Test() Dim xl As Excel.Application For Each xl In GetExcelInstances() Debug.Print "Handle: " & xl.ActiveWorkbook.FullName Next End Sub Private Function GetExcelInstances() As Collection Dim guid&(0 To 3), acc As Object, hwnd, hwnd2, hwnd3 guid(0) = &H20400 guid(1) = &H0 guid(2) = &HC0 guid(3) = &H46000000 Dim AlreadyThere As Boolean Dim xl As Excel.Application Set GetExcelInstances = New Collection Do hwnd = FindWindowExA(0, hwnd, "XLMAIN", vbNullString) If hwnd = 0 Then Exit Do hwnd2 = FindWindowExA(hwnd, 0, "XLDESK", vbNullString) hwnd3 = FindWindowExA(hwnd2, 0, "EXCEL7", vbNullString) If AccessibleObjectFromWindow(hwnd3, &HFFFFFFF0, guid(0), acc) = 0 Then AlreadyThere = False For Each xl In GetExcelInstances If xl Is acc.Application Then AlreadyThere = True Exit For End If Next If Not AlreadyThere Then GetExcelInstances.Add acc.Application End If End If Loop End Function
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Christian-67 Mitglied Entwicklungsingenieur
 
 Beiträge: 103 Registriert: 14.06.2006 DELL - Precision 7540 Windows 10 Inventor 2022
|
erstellt am: 29. Jun. 2024 10:16 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |