Office: Excel aktivieren, Anwendungen schließen

Helfe beim Thema Excel aktivieren, Anwendungen schließen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo allerseits, nach mehrstündiger erfolgloser Recherche in den unendlichen Weiten des Internetzes habe ich mich dazu entschlossen, meine aktuelle... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von PogoBernd, 4. November 2015.

  1. Excel aktivieren, Anwendungen schließen


    Hallo allerseits,

    nach mehrstündiger erfolgloser Recherche in den unendlichen Weiten des Internetzes habe ich mich dazu entschlossen, meine aktuelle Herausforderung mit der Hoffnung auf Lösung nun der geballten Erfahrung der Forumsmitglieder vorzulegen.

    Die Ausgangssituation ist wie folgt:
    Ich habe eine Excelliste (...wie erstaunlich ;-)).

    In dieser Liste sind
    • in Spalte A die Namen von Dateien inklusive Endung
    • in Zelle B2 der Speicherpfad dieser Dateien, abgeschlossen mit "\"
    aufgeführt.

    Über das Workbook_SheetSelectionChange() wird der komplette Pfad aus B2 und Cells(target.row,1) zusammengesetzt und die Datei in der zugewiesenen Anwendung geöffnet.

    Nun habe ich folgende Fragen:
    • Wie bekomme ich das auslösende Programm (Excel)/die auslösende Instanz (wobei normalerweise nur eine einzige aktiv ist) wieder aktiviert?
    • Wie kann ich feststellen, mit welcher Anwendung die Datei geöffnet wurde?
    • Wie bekomme ich die grade geöffnete Datei wieder geschlossen, wenn ich eine neue Selection mache?
    • Wie kann ich dabei verhindern, dass Dateien, die NICHT durch das Selection, sondern durch einen anderen Vorgang (bspw. Doppelklick im Explorer) geöffnet worden sind, geschlossen werden?

    Ich freue mich auf und über alle Antworten und bedanke mich schonmal für eure Unterstützung...

    Beste Grüße,



    EDIT zu Frage 1:
    ich habe folgendes bereits in einem Modul erfolglos versucht
    Code:
    :)
     
    PogoBernd, 4. November 2015
    #1
  2. Hallo,

    ein Beispiel zum basteln:

    Option Explicit

    Private Declare PtrSafe Function GetParent Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function GetWindow Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal wCmd As Long) As LongPtr
    Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
    Private Declare PtrSafe Function GetWindowThreadProcessId Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByRef lpdwProcessId As Long) As Long
    Private Declare PtrSafe Function PostMessageA Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal wMsg As Long, _
    ByVal wParam As LongPtr, _
    ByVal lParam As LongPtr) As Long

    Private Const GW_HWNDNEXT As Long = 2
    Private Const WM_CLOSE As Long = &H10

    Private llngProcessId As Long
    Private llngptrHwnd As LongPtr

    Public Sub Test2()

    llngProcessId = Shell("C:\Windows\system32\notepad.exe", vbNormalFocus)

    End Sub

    Public Sub KillProcess()

    llngptrHwnd = GetWindowHandle(llngProcessId)

    If llngptrHwnd <> 0 Then Call PostMessageA(llngptrHwnd, WM_CLOSE, 0, 0)

    End Sub

    Private Function GetWindowHandle(ByVal pvlngProcessId As Long) As LongPtr

    Dim lngptrHwnd As LongPtr, lngProcessId As Long

    lngptrHwnd = FindWindowA(vbNullString, vbNullString)

    Do Until lngptrHwnd = 0

    If GetParent(lngptrHwnd) = 0 Then

    Call GetWindowThreadProcessId(lngptrHwnd, lngProcessId)

    If pvlngProcessId = lngProcessId Then

    GetWindowHandle = lngptrHwnd

    Exit Do

    End If
    End If

    lngptrHwnd = GetWindow(lngptrHwnd, GW_HWNDNEXT)

    Loop
    End Function
     
    Nepumuk, 6. November 2015
    #2
  3. Achso,

    Excel in den Vordergrund:

    Option Explicit

    Private Declare PtrSafe Function GetForegroundWindow Lib "user32.dll" () As LongPtr
    Private Declare PtrSafe Function SetForegroundWindow Lib "user32.dll" ( _
    ByVal hwnd As LongPtr) As Long
    Private Declare PtrSafe Function GetWindowThreadProcessId Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByRef lpdwProcessId As Long) As Long
    Private Declare PtrSafe Function AttachThreadInput Lib "user32.dll" ( _
    ByVal idAttach As Long, _
    ByVal idAttachTo As Long, _
    ByVal fAttach As Long) As Long
    Private Declare PtrSafe Function ShowWindow Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal nCmdShow As Long) As Long

    Private Const SW_MAXIMIZE = 3
    Private Const GC_CLASSNAMEEXCEL = "XLMAIN"

    Public Sub Excel_in_den_Vodergrund()
    Dim lngptrHwnd As LongPtr
    Dim lngThreadForeWindow As Long, lngThreadWindow As Long
    lngptrHwnd = CLngPtr(Application.hwnd)
    lngThreadWindow = GetWindowThreadProcessId(lngptrHwnd, ByVal 0&)
    lngThreadForeWindow = GetWindowThreadProcessId(GetForegroundWindow(), ByVal 0&)
    If lngThreadWindow = lngThreadForeWindow Then
    Call SetForegroundWindow(lngptrHwnd)
    Else
    Call AttachThreadInput(lngThreadForeWindow, lngThreadWindow, 1&)
    Call SetForegroundWindow(lngptrHwnd)
    Call AttachThreadInput(lngThreadForeWindow, lngThreadWindow, 0&)
    End If
    Call ShowWindow(lngptrHwnd, SW_MAXIMIZE)
    End Sub
     
    Nepumuk, 6. November 2015
    #3
  4. Excel aktivieren, Anwendungen schließen

    das werde ich mir direkt mal ansehen...

    Klappt leider nicht. Ich habe das
    Excel_in_den_Vodergrund
    nach meinem ShellExecute eingebunden, aber der Focus bleibt trotzdem auf dem anderen Programm...

    Den übrigen Code kriege ich zwar ans Laufen, aber es passiert einfach 0 *frown.gif*

    Ich werd wohl noch ein bisschen weiterbasteln müssen...
     
    PogoBernd, 8. November 2015
    #4
  5. Hallo Nepumuk,
    vielen Dank im Übrigen noch für deinen Lösungsansatz, das ist in meinem letzten Post irgendwie untergegangen...

    Dank deiner habe ich mich nochmals auf die Suche begeben und bin auf allerlei weitere Beiträge hier und anderswo gestoßen, die mich weiter voran gebracht haben. Ich habe jetzt ne Menge rumgebastelt und auch einige Teilerfolge erzielt:

    Das
    und
    das habe ich umgangen, indem ich das zu verwendende Programm vorgebe.

    Das
    habe ich (hoffentlich) über die Variable strAlteDatei gelöst.

    Das
    und das
    funktioniert leider immer noch nicht...

    Code:
    Ich habe es auch mit Code probiert, der die aktiven Prozesse durchläuft, anhand des Fenstertitels im Vergleich mit strAlteDatei den Handle identifiziert und dann den Prozess beendet, allerdings wird die Fotoanzeige und alle anderen Anwendungen gehostet und die Beendigung des Prozesses killt mir meine komplette Sitzung... habe leider auch nicht wirklich durchblickt, was da im einzelnen abläuft *frown.gif* Kann da noch irgendjemand was passendes beisteuern? Das wäre echt toll...

    Beste Grüße,
    PB
     
    PogoBernd, 10. November 2015
    #5
  6. Hallo PB,

    wenn ich dich richtig verstanden habe, dann so vielleicht:
    Code:
    mfg Anton
     
  7. Hallo Anton, danke für deinen Beitrag.

    ich hab mir das grade mal im Detail angeschaut und rausbekommen, was die einzelnen Funktionen für Ergebnisse liefern - wenn ich das richtig interpretiere, findet dein Code für das Dateiformat der ausgewählte Zelle das assoziierte Programm. Das ist in sofern schon mal gut, bringt mir jetzt allerdings nichts mehr, da ich durch die Vorgabe, mit welchem Programm die Dateien geöffnet werden sollen, dieses Programm ja schon kenne (oder habe ich da was falsch verstanden? Leider passiert bei meinen Testläufen ansonsten rein gar nichts. Wenn ich den Code ausführe, wird WEDER das gefundene Programm aufgerufen, NOCH (so denn eine der Dateien bereits geöffnet ist) der zugehörige Task geschlossen.

    AAARGGGHHH!!! Das kann doch nicht so schwer sein ?!?!
    Es muss doch möglich sein, anhand von Fenstertitel und strAlteDatei das passende Fenster zu identifizieren und dann dieses zu schließen - meinetwegen auch mit SendKeys?!? Ich krieg die Pimpanellen *mad.gif* *mad.gif* *boah *boah *entsetzt *upps *upps

    Danke nochmal an alle, ich werde mir nochmal alles in Ruhe anschauen und weiter rumprobieren - sollte ich dabei auf eine Lösung stoßen, lasse ich es euch wissen...

    Beste Grüße,
    PB
     
    PogoBernd, 10. November 2015
    #7
  8. Excel aktivieren, Anwendungen schließen

    Hallo PB,

    welchen Wert hat die Variable sDatei bei deinen Tests?

    mfg Anton
     
  9. Das passt schon soweit:
    C:\Users\PogoBernd\Desktop\Fotos Original\P1000662.JPG
    wobei natürlich der Dateiname davon abhängt, welche Zelle ich anklicke.
     
    PogoBernd, 10. November 2015
    #9
  10. Hallo nochmal,

    noch ein Versuch:
    Code:
    mfg Anton
     
  11. Super, die wichtigsten Sachen funktionieren, herzlichen Dank Anton.
    Genau so hatte ich mir das ursprünglich vorgestellt.

    Es sucht im Bedarfsfall das Programm, welches die Datei öffnen könnte
    Es öffnet die angeklickte Datei
    Es killt den Task, den ich zuvor damit geöffnet hatte, aber keinen anderen

    Was es nicht tut:
    Es zieht mir Excel nicht wieder in den Vordergrund

    Was ich noch zu dem Thema ergänzen muss:
    Ich habe die Auflistung der Dateien so umprogrammiert, dass AUSSCHLIEßLICH BMPs, JPEGs und JPGs berücksichtigt werden - der FindExecutable-Teil entfällt damit komplett - SORRY *frown.gif*
    Statt PAINT nehme ich lieber OFFICE (am Liebsten hätte ich den Fotoviewer gehabt - den krieg ich aber nicht ans laufen, offenbar wegen EXE vs. DLL Problematik)

    Folgender Code steht nun und funktioniert:
    Code:
    Kleinigkeiten, die noch schön wären, wären:
    Excel direkt wieder in den Vordergrund ziehen
    Verwendung des Photoviewers, da OFFICE im Vergleich bei der Anzeige der Pics teilweise ganz schön langsam ist...

    ...ansonsten Problem gelöst.

    Besten Dank an alle Beteiligten und auch die nicht genannten Mitglieder anderer Foren

    Beste Grüße,
    PB
     
    PogoBernd, 11. November 2015
    #11
  12. \@Nepumuk:
    Ich habe meinen Code jetzt wie Folgt um deinen ergänzt:
    Code:
    Ich schaffe es dadurch, den Fokus von dem Bild wegzunehmen - aber Excel wird dadurch nicht wieder aktiviert... Ich habe dann probiert, das Ergebnis durch den ELSE-Zweig zu erzwingen, aber das Ergebnis ist das gleiche.
     
    PogoBernd, 11. November 2015
    #12
  13. Excel aktivieren, Anwendungen schließen

    Hallo PB,

    was zum Testen:
    Code:
    mfg Anton
     
  14. Hallo PB,

    folgende Idee, damit du Excel erst gar nicht verlassen, und somit auch den Fokus nicht zurückholen musst.

    Erstelle aus deiner Excel-Anwendung eine Aufgabe (Systemsteuerung > System und Sicherheit > Verwaltung > Aufgaben planen), die nur einmal, aber sofort ausgeführt wird.

    Ich selbst habe zwar keine Erfahrung damit, aber so müsste es eigentlich gehen.
     
  15. Hallo allerseits,

    @Anton
    Ich habe das ausprobiert, einen solchen Code
    Code:
    hatte ich bereits verwendet, aber seltsamerweise öffnete sich das Photoviewer-Programm nicht, und das ist auch mit deinem Code so.

    Dein weiterer Code
    Code:
    läuft super !!!! (...im Zusammenhang mit Office jedenfalls)

    @WS-53:
    eine interessante Idee... ich fürchte aber, dass das mit gehosteten Anwendungen äußerst schwierig zu machen sein wird, und da ich sicherlich auf die Serveraufgaben keinen Zugriff habe und wenn, dann vermutlich RIESEN Stress bekomme, lasse ich da lieber die Finger von ;-D

    Beste Grüße,
    PB
     
    PogoBernd, 11. November 2015
    #15
Thema:

Excel aktivieren, Anwendungen schließen

Die Seite wird geladen...
  1. Excel aktivieren, Anwendungen schließen - Similar Threads - Excel aktivieren Anwendungen

  2. Makros in Excel 2007 aktivieren

    in Microsoft Excel Hilfe
    Makros in Excel 2007 aktivieren: Fehler 57121
  3. Microsoft Office 2021 Home and Business für Mac- Excel: Datentyp aktivieren "Geographie & Aktien"

    in Microsoft Excel Hilfe
    Microsoft Office 2021 Home and Business für Mac- Excel: Datentyp aktivieren "Geographie & Aktien": Hallo zusammen, ich habe mir "Microsoft Office 2021 Home and Business" für Mac zugelegt. Nun habe ich gesehen das es wohl auch die Neuerung gibt, den Datentyp "Geographie" und "Aktien" zu...
  4. Aktivieren der Blitzvorschau in Excel

    in Microsoft Excel Tutorials
    Aktivieren der Blitzvorschau in Excel: Aktivieren der Blitzvorschau in Excel Excel für Microsoft 365 Excel 2019 Excel 2016 Mehr... Weniger...
  5. variable Excel-Datei aktivieren

    in Microsoft Excel Hilfe
    variable Excel-Datei aktivieren: Hallo alle zusammen Ich habe ein kleines Problem und hoffe Ihr könnt mir helfen *Smilie Per VBA sollen von einer Datei (Datei A) Daten in eine andere, bereits existierende Datei (Datei X)...
  6. Geöffnete Excel-Datei über Makro aktivieren

    in Microsoft Excel Hilfe
    Geöffnete Excel-Datei über Makro aktivieren: Hallo zusammen, ich habe ein Makro geschrieben, durch das Daten aus einer Excel-Datei in eine andere Excel-Datei 'rüber kopiert werden sollen. Das Makro wird aus der "Zieldatei" aufgerufen....
  7. Wenn Zelle richtig dann aktiviere ander Zelle

    in Microsoft Excel Hilfe
    Wenn Zelle richtig dann aktiviere ander Zelle: Hallo Excelspezies, Benutze Office-Excel 2013 Ich konstruiere ein Übungsprogramm für die Artikelbestimmung. Wenn ich in die Zelle C6 den richtigen Artikel schreibe sollte nach Enter die Zelle H6...
  8. Add-ins in Excel 2007 lassen sich nicht aktivieren

    in Microsoft Excel Hilfe
    Add-ins in Excel 2007 lassen sich nicht aktivieren: Hallo, ich habe ein Problem mit dem Aktivieren der Add-ins in Excel 2007. Konkret handelt es sich um die Add-ins Solver und die VBA Analyse-Funktion. Die Add-ins sind installiert und nun...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden