Mit Shell Datei öffnen und Makros ausführen

  • Excel

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Mit Shell Datei öffnen und Makros ausführen

    Hallo liebe Forengemeinde,
    ich bin gerade dabei einen VBA Code für Outlook zu schreiben, der eine Application auführt und anschließend eine .xls Datei in dieser Application öffnet.
    Ich möchte automatisieren, dass unmittelbar nach dem öffnen innerhalb der ExcelDatei ein Makro ausgeführt wird und anschließend das Sheet gespeichert und die Application wieder geschlossen wird.

    Ich habe einen Code, der Excel öffnet und die ganze Prozedur ausführt, leider muss die Datei aber in einem anderen Programm (also nicht Excel) geöffnet werden, da diese Application an einen Datenfeed mit Finanzmarktdaten angeschlossen ist.

    Hier mal mein bisheriger Code, der soweit funktioniert:

    Visual Basic-Quellcode

    1. Sub OpenUp()
    2. Dim wshell As ObjectDim objExcelBook as String
    3. Shell ("C:\Program Files\Reuters\PowerPlus\Pppro.exe"), vbNormalFocus
    4. Set wshell = CreateObject("Wscript.shell")
    5. objExcelBook = """P:\My Documents\Market Data\Volume2\Master.xls"""
    6. wshell.Run objExcelBook



    Zuerst wird also die Application gestartet, das Sheet anschließend in der Application geöffnet. Wie kann ich das Sheet jetzt in dem Code so ansprechen, dass es die Makro, die in diesem Workbook gespeichert sind, ausführt?
    Mit

    wshell.Run "Master.xls!Aufbereiter"


    hatte ich bisher leider kein Glück, ich bekomme eine Fehlermeldung zurück.

    Liebe Grüße
    und Vielen Dank im Voraus
    Jules

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „JulesM“ ()

    petaod schrieb:

    Entweder du packst den Code in das Open-Event (Workbook_Open)
    Oder besser, du öffnest das Objekt nicht mit einer Shell, sondern mit Excel, dann hast du das komplette Objektmodell zur Verfügung.

    -> CreateObject("Excel.Application")
    Danke für deine Antwort, aber genau das ist das, was ich nicht will, weil es nicht funktioniert.
    Die Datei DARF NICHT in einem Excel geöffnet werden, sondern muss in dem Programm PowerPlusPro geöffnet werden.

    JulesM schrieb:

    Die Datei DARF NICHT in einem Excel geöffnet werden, sondern muss in dem Programm PowerPlusPro geöffnet werden.
    Du öffnest immer Excel, du öffnest es eben indirekt über eine Shell.
    Genauso gut kannst du es direkt öffnen, dann hast du Zugriff auf das Objektmodell.

    Ausserdem hast du die erste Hälfte meines Beitrags ignoriert.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Was genau habe ich ignoriert?
    Ich habe es mit diesem Code probiert und es funktioniert nicht einwandfrei.

    Visual Basic-Quellcode

    1. Sub OpenExcel()Dim objExcelApp As ObjectDim objExcelBook As ObjectDim objExcelSheets As ObjectDim objExcelSheet As Object
    2. Set objExcelApp = Application.CreateObject("Excel.Application")objExcelApp.Workbooks.Open ("P:\My Documents\Market Data\ Master.xls")
    3. Set objExcelBook = objExcelApp.ActiveWorkbookSet objExcelSheets = objExcelBook.WorksheetsSet objExcelSheet = objExcelBook.Sheets(1)
    4. 'objExcelSheet.Activate
    5. objExcelApp.Application.Visible = True
    6. objExcelApp.Run "Master.xls!Import"
    7. End Sub



    Das Programm wird geöffnet, die Addins jedoch werden nicht korrekt geladen.
    Beim Öffnen der pppro.exe Application wird hingegen alles korrekt geöffnet, die Datei auch ordnungsgemäß geladen, nur leider kann ich die Makros nicht ansteuern.
    Gibt es eine Möglichkeit, über die Shell Methode die Makros anzusteuern?

    P.S. wieso werden teilweise die Leerzeichen übernommen, wenn ich hier einen Code poste und teilweise nicht?
    dann werden die makros auch jedes mal ausgeführt, wenn man die datei manuell öffnet
    Ja.
    Es gibt aber den Trick, dass du die CommandLine mit einem gefahrlosen Parameter modifizierst.

    Wenn du den automatisierten Aufruf mit /eautomated startest, kannst du im Open-Event die CommandLine abfragen und die automatisierten Vorgänge nur dann ausführen, wenn dieser Parameter enthalten ist.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ok, ich habe mal google bemüht und nach /eautomated gesucht, aber leider nichts gefunden.
    Wie sieht das Argument konkret aus? Muss einfach in meinem bestehenden Code, der die Datei öffnet, ein "Codewort" stehen, welches erkannt wird?
    Sorry für die dumme Frage, aber -wie gesagt- ich finde dazu leider nichts.

    JulesM schrieb:

    Muss einfach in meinem bestehenden Code, der die Datei öffnet, ein "Codewort" stehen, welches erkannt wird?
    So ist es.

    Es gibt kein /eautomated.
    Aber es gibt ein /e, dem es nichts schadet, wenn noch andere Zeichen dahinter stehen. ;)

    Der Parameter wird vergewaltigt, um dem Aufruf eine Info mitzugeben, die über GetCommandLine abgefragt werden kann.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --