Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  auf 2 offene Excel-Sitzungen zugreifen?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  auf 2 offene Excel-Sitzungen zugreifen? (71 / mal gelesen)
Christian-67
Mitglied
Entwicklungsingenieur


Sehen Sie sich das Profil von Christian-67 an!   Senden Sie eine Private Message an Christian-67  Schreiben Sie einen Gästebucheintrag für Christian-67

Beiträge: 103
Registriert: 14.06.2006

DELL - Precision 7540
Windows 10
Inventor 2022

erstellt am: 28. Jun. 2024 15:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2505
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 28. Jun. 2024 20:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Christian-67 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Christian-67 an!   Senden Sie eine Private Message an Christian-67  Schreiben Sie einen Gästebucheintrag für Christian-67

Beiträge: 103
Registriert: 14.06.2006

DELL - Precision 7540
Windows 10
Inventor 2022

erstellt am: 29. Jun. 2024 10:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Ralf,
Vielen Danke für deine Hilfe,
Ich werde es gleich am Montag ausprobieren.

------------------
Gruß Christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz