Fehlermeldung im Menü

  • Damit wir hier nicht unnötig rumraten müssen. Poste bitte das Skript sowie die Ausgabe der SciTE Konsole.

  • Hier das Sript wie gewünscht.

    #include <Excel.au3>

    #include <MsgBoxConstants.au3>

    ; ===> COM Errorhandler : Kommentarzeichen bei Bedarf entfernen

    ;~ Local $oErrorHandler = ObjEvent("AutoIt.Error", "_COMErrFunc")

    ; Erstellt ein Excel Anwendungs-Objekt oder verbindet zu einer bereits Instanz

    Local $oExcel = _Excel_Open()

    If @error Then

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Open ", _

    "Fehler beim Erstellen des Excel Anwendungs-Objekt." & @CRLF & _

    "@error = " & @error & ", @extended = " & @extended)

    Else

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Open ", _

    "Excel Anwendung wurde erfolgreich geöffnet." & @CRLF)

    ; öffnet ein existierendes workbook und gibt den Objectidentifier zurück :

    Local $sWorkbook = "C:\DHL-Versand\Versand.xlsm"

    Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)

    If @error Then

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen ", _

    "Fehler beim Öffnen des Workbooks : " & @CRLF & _

    "Dateiname : " & $sWorkbook & @CRLF & _

    "@error = " & @error & ", @extended = " & @extended)

    _Excel_Close($oExcel)

    Exit

    Else

    $oWorkbook.parent.run("Versand") ; Name des Makros

    EndIf

    Sleep(2000)

    ; Schließt das Excel Anwendungs-Objekt

    _Excel_Close($oExcel)

    If @error Then

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Close ", _

    "Fehler beim Schließen des Excel Anwendungs-Objekt." & @CRLF & _

    "@error = " & @error & ", @extended = " & @extended)

    Else

    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Open ", _

    "Excel Anwendung wurde erfolgreich geschlossen." & @CRLF)

    EndIf

    EndIf

    ; ===> COM Errorhandler : Kommentarzeichen bei Bedarf entfernen

    Func _COMErrFunc($oError)

    MsgBox(16, "COM Error", "COM-Error ! " & @CRLF & _

    "Number is : " & "0x" & Hex($oError.number) & @CRLF & _

    "Retcode is : " & "0x" & Hex($oError.retcode) & @CRLF & _

    "Scriptline is : " & $oError.scriptline & @CRLF & _

    "Windescription is: " & $oError.windescription & @CRLF & _

    "Description is: " & $oError.description)

    Return SetError(1)

    EndFunc ;==>_COMErrFunc

  • Ich habe das Skript mal etwas gekürzt und die unnötigen Zeilen in Kommentar gesetzt. Wenn das Makro nach getaner Arbeit Excel schließt, dann brauchst Du das im Skript nicht mehr zu tun.
    Im Gegenteil: Das Makro beendet Excel. Damit ist die Referenz von AutoIt auf das Excel Objekt nicht mehr gültig und bringt daher einen Fehler, wenn sich _Excel_Close darauf bezieht.

  • Folgende Fehler Meldung

    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\DHL-Versand\Test.au3"

    "C:\DHL-Versand\Test.au3" (24) : ==> The requested action with this object has failed.:

    $oWorkbook.Parent.Run("Versand")

    $oWorkbook.Parent^ ERROR

    >Exit code: 1 Time: 10.54

    kommt jetzt Makro und Excel werden nicht mehr beendet

  • Was kriegst Du wenn Du folgenden Befehl verwendest?

    Code
    $oExcel.Run("Versand")     ; Name des Makros
  • Den gleichen Fehler und Excel bleibt offen


    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\DHL-Versand\Test.au3"

    "C:\DHL-Versand\Test.au3" (24) : ==> The requested action with this object has failed.:

    $oWorkbook.Run("Versand")

    $oWorkbook^ ERROR

    >Exit code: 1 Time: 12.07

  • Dann brauchen wir jetzt die Version mit dem COM error handler.

  • Gut. Nächste Version wo wir den COM error der Run-Funktion abfangen und bei Fehler das Skript beenden.

    Bei Erfolg wird Excel sauber beendet.

  • Welche Schleife?

  • Die Makrodatei wird 2 mal durchlaufen und beim

    2. mal beendet.

    Ich habe einen Beenden Button in der Datei, der die Einträge in den Datenblätter löscht.

  • Mit AI wird das Makro aufgerufen.

    Bearbeitet wird nur mit Userforms und Makros

    nicht mit Excel (läuft nur im Hintergrund.)

    Wenn das Makro abgearbeitet ist muss ich es ja mit einem Button beenden.

    Gebe ich per VBA den Befehl zum beenden, kommt die Fehlermeldung.

    Was (BugFix #23) geschrieben hat kann nicht funktionieren.

    Irgendwie muss ja AI erfahren wann das Makro beendet ist.

    • Offizieller Beitrag

    Was (BugFix #23) geschrieben hat kann nicht funktionieren.

    Du machst also alles mit AutoIt ausser dem Makro? Führe das (also den Inhalt!) doch auch mit AutoIt aus. dann läuft alles in einer Ebene und du hast keine Probleme. Der VBA-Code des Makros kann völlig problemlos in AutoIt-Code übersetzt werden. Womit wir wieder beim Stichwort Excel-UDF sind. :)

    EDIT:

    Wenn du natürlich extrem umfangreiche xlsm erstellt hast, kann das etwas aufwändig sein. Ich würde es aber bevorzugen, weil man dann unabhängig von den xlsm wird.

  • Danke für deine Rückmeldung!

    Die xlsm ist sehr umfangreich.

    Sehr viele Userforms, SpinButtons, Funktionen, Module, Barcodeerzeugung und Druckersteuerung.

    Wie muß ich denn vorgehen um alles über Autoit zu machen.

    Das ist das 1. mal wo ich was mit Autoit mache.

    Gruß Windi

  • Da die Excel Makros in VBA (Visual Basic for Applications) geschrieben sind, sind sie halbwegs "einfach" in AutoIt umsetzen.

    Mit Userforms, SpinButtons, Barcoderzeugung habe ich bisher keine Erfahrungen ... müsste man also probieren.

    • Offizieller Beitrag

    Ich habe vor etlichen Jahren mal getestet, wie sich GUI und Controls in VBA erstellen und anwenden lassen. Mein Fazit war: Wenn viel in Excel abzuarbeiten ist, sollte man die Grafik auch gleich in VBA machen. Die Objekte lassen sich leicht erstellen, sind über ihre Properties gut zu händeln und bieten optische Features, die man in AutoIt nicht (oder nicht ohne Weiteres) realisieren kann - z.B. lassen sich hinter alle Control auch Grafiken legen.

    Der Objektkatalog im VBA-Editor (Alt+F11) listet dir alle verfügbaren Methoden, Properties und Konstanten auf. Im Editor kann man sich super mit den Objekten vertraut machen und mal mit spielen.

    Leider kann ich mein Bsp. nicht mehr auffinden, ist bei einem Forenupdate mit vielen anderen Konversationen verloren gegangen.