Schließen einer Excel Datei

  • VBScript

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Lutz Fricke.

    Schließen einer Excel Datei

    Hallo zusammen,

    ich bin noch ziemlich unerfahren mit VBS und habe mir ein Script gebastelt, dass eine Abfrage im SAP laufen lässt, die Daten in eine txt.-Datei speichert und anschließend Excel startet und dort ein VBA-Makro die Daten bearbeitet.
    Jetzt habe ich das Problem, dass (warum auch immer) mein Excel in unregelmäßigen Abständen (in VBS aber auch manuell) nicht richtig startet. Das ist natürlich im automatischen Ablauf meines VBScripts ein Problem.

    On error resume next
    wshell.run chr(34) & "\\denbppfs002\Abteilungslaufwerke\EHS\Produktionsreporting\Makros\Autostart Mühlen.xlsm" & chr(34),1,false

    error = Err.Number
    If error <> 0 Then
    do
    msgbox error
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Workbooks.Close()
    objExcel.Quit ()
    wscript.sleep 4000
    wshell.run chr(34) & "\\denbppfs002\Abteilungslaufwerke\EHS\Produktionsreporting\Makros\Autostart Mühlen.xlsm" & chr(34),1,false
    error = Err.Number
    msgbox error
    loop until error = 0
    On error goto 0
    End if

    Es scheint soweit zu funktionieren, ABER warum schließt das Skript mein Excel nicht? ?(

    Vielen Dank für Eure Hilfe,
    Lutz
    Entweder du kickst dein Excel nur parallel los per WshShell und damit ist es ab dem Moment losgelöst von deinem Script und es muss dir egal sein, was damit passiert und wie es sich schließt.
    Wenn du später eine andere Excel-Instanz per CreateObject erzeugst, so ist das nicht dieselbe wie die, die schon läuft.

    Warum arbeitest du nicht gleich mit CreateObject?
    So könntest du steuern, was in der Excel-Session passiert.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo Petaod,

    vielen Dank für die schnelle Antwort und Anregung.

    Habe ich es richtig verstanden, dass ich mein Excel, wenn ich ich es vorher manuell öffne ehh nicht so einfach schließen kann? Das brauch ich logischerweise nur zum Testen, da der eigentliche Fehler nicht dauernd auftaucht.

    Ich hab versucht das Skript umzustricken und gleich das Excel-Makro zu starten.
    Ich hab die Zeile "error=42" eingefügt, um die Fehlerbearbeitung durchlaufen zu lassen.

    On error resume next
    'wshell.run chr(34) & "\\denbppfs002\Abteilungslaufwerke\EHS\Produktionsreporting\Makros\Autostart Mühlen.xlsm" & chr(34),1,false

    set objExcel = CreateObject("Excel.Application")
    'error = Err.Number
    error=42
    If error <> 0 Then
    do
    msgbox error, vbinformation, "Mühlen"
    objExcel.Workbooks.Close()
    objExcel.Quit()
    wscript.sleep 4000
    set objExcel = CreateObject("Excel.Application")
    error = Err.Number
    msgbox error
    loop until error = 0
    End if
    On error goto 0

    objExcel.Visible = True
    set workbook = Excel.Workbooks.Open("\\denbppfs002\Abteilungslaufwerke\EHS\Produktionsreporting\Makros\Makro Mühlen.xlsm")
    Excel.run "modul1.A_StartMühlen"

    So geht das Excel aber gar nicht auf, obwohl die Schleife durchlaufen wird ;( .
    Ich krieg in der Zeile "objExcel.Visible = True" den Fehler "Objekt erforderlich: 'Excel'

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lutz Fricke“ ()

    Hallo Mono,

    vielen Dank für den Tipp. Manchmal sieht man den Wald vor lauter Bäumen nicht.
    Ok, Excel geht jetzt auf. Aber wie starte ich das Makro?

    On error resume next
    'wshell.run chr(34) & "\\denbppfs002\Abteilungslaufwerke\EHS\Produktionsreporting\Makros\Autostart Mühlen.xlsm" & chr(34),1,false

    set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    'error = Err.Number
    error=42
    If error <> 0 Then
    do
    msgbox error, vbinformation, "Mühlen"
    objExcel.Workbooks.Close()
    objExcel.Quit()
    wscript.sleep 4000
    set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    error = Err.Number
    msgbox error
    loop until error = 0
    End if
    On error goto 0

    set workbook = objExcel.Workbooks.Open("\\denbppfs002\Abteilungslaufwerke\EHS\Produktionsreporting\Makros\Makro Mühlen.xlsm")
    objExcel.run "Modul1.A_StartMühlen()"

    Ich kriege folgende Fehlermeldung:"Das Makro 'Modul1.A_StartMühlen()' kann nicht ausgeführt werden. Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert."
    Das Makro "A_StartMühlen()" ist aber im Modul1 vorhanden und aktiv. Wo ist der Haken?

    Ändere ich die letzte Zeile auf:
    objExcel.run "A_StartMühlen"
    Bekomme ich als Fehler "Unbekannter Laufzeitfehler".

    Vielen Dank für Eure Hilfe.
    Lutz

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lutz Fricke“ ()

    Also mein erster Tip vorab. Verwende keine Umlaute bei deinen Variablen oder Prozedurbezeichnungen..

    2. Wenn du die Excelmappe normal öffnest, dann Alt+F11, dann F5. Siehst du die Prozedur?
    Starte es bitte. Läuft es oder erhältst du auch "Unbekannter Laufzeitfehler".?

    objExcel.run "A_StartMühlen"

    Das wäre normalerweise der Richtige Weg.
    Das ist meine Signatur und sie wird wunderbar sein!
    Hab jetzt nochmal genauer geschaut.
    Das Makro läuft und macht was soll.

    Ich Depp habe im Excel-Makro Excel selbst geschlossen. Das taugt dann offensichtlich dem VBSkript nicht und gibt nen Fehler.

    Mit
    objExcel.run "A_StartMühlen"
    objExcel.Workbooks.Close()
    objExcel.Quit()
    funktioniert's super.

    Aufgabe gelöst (hoffe ich jedenfalls) 8o .

    Vielen Dank an alle Helfer.