Excel 2007 als .xlsm speichern

  • Hallo,

    ich habe in meiner GUI ein Excel Sheet, das ich nach der Bearbeitung gerne dort abspeichert würde, wo das ursprüngliche Sheet geöffnet wurde ($pfad) aber mit einem in einer Inputbox angegebenen Namen (&EEPInput).

    Jetzt ist es so, dass ich es mit diesem Befehl super als .xls abspeichern kann:

    _ExcelBookSaveAs($oExcelDoc.Application, $pfad & $EEPInput & ".xls" , "xls")

    ABER ich hätte eben gerne ein .xlsm File. Nur aus ".xls" jeweils ".xlsm" zu machen geht nicht. Jetzt habe ich schon in Foren was über UDFs gelesen, aber ich weiß nicht sicher wie das mit den UDFs funktioniert.

    Hat jemand ein Tipp für mich wie ich mein Excel Sheet als .xlsm abspeichern kann? Oder könnte mir jemand das mit den UDFs erklären?

    Einmal editiert, zuletzt von vakaba (6. Februar 2014 um 13:25)

  • Das Excel UDF, das mit AutoIt mit geliefert wird, unterstützt die ab Excel 2007 eingeführten neuen Format (.xls*) nicht.
    Probier es mit meinem Rewrite der Excel UDF. Die kann das und wird ab der nächsten Beta von AutoIt die aktuelle Excel UDF ersetzen.

  • Hallo Water,

    danke für deinen Tipp mit deiner UDF. Ich hab die jetzt runtergeladen und in meinem "include"-Ordner ausgepackt. Ist das das richtige Vorgehen?

    Jetzt kommt bei diesem Befehl zwar keine Fehlermeldung mehr, aber gespeichert wird die .xlsm Datei leider trotzdem nicht... :(

    _ExcelBookSaveAs($oExcelDoc.Application, $pfad & $EEPInput & ".xlsm" , "xlsm")

    Ich weiß leider gar nicht sicher ob ich das mit der UDF richtig mache... Kann mir jemand sagen, wo ich nachlesen kann, wie man mit einer UDF genau umgehen muss, um ihre Befehle verwenden zu können? Das wäre spitze! :)

  • Kopiere die UDF ("Excel Rewrite.au3") in den Ordner in dem Dein Script liegt.
    Passe das Statement "#include <Excel Rewrite.au3>" in Deinem Script an.
    Die Funktionen der neuen UDF heissen alle _Excel_* statt wie bisher _Excel* (beachte den zweiten Unterstrich).
    Im Skript musst Du IMMER _Excel_Open als erste Funktion aufrufen.
    Das Excel WorkBook mit "_Excel_BookSaveAs($oWorkbook, $pfad & $EEPInput & ".xlsm" , $xlOpenXMLWorkbookMacroEnabled) sichern

    Bei Fragen schau Dir bitte das Beispielskript _Excel_BookSaveAs.au3 an.

  • Ok ich hab das jetzt wirklich alles gemacht. Ich habe mir auch das Beispielscript durchgelesen. Aber ich bekomme sobald ich "#include <Excel REwrite.au3> eine Fehlermeldung die ich wirklich überhaupt nicht verstehe. Und zwar sieht die so aus: (ich schreibe einfach wirklich alles auf, was auf der Fehler-MsgBox steht...)

    -----------------------

    Line 29 (File "C:\Users\BaierV\AppData\Notepad++Portable\autoit_3380\AutoIt3\Include\ExcelConstants.au3"):

    Global Const $xlCenter = -4108

    Global Const^ERROR

    Error: Can not redeclare a constant.

    -------------------------

    Ich verstehe überhaupt nicht was das Problem ist, da ich "excelConstants.au3" in meinem Programm gar nie aufrufe. Und ich verwende auch keine $xlCenter" Variable.

  • 2 Dinge fehlten noch:

    • Die beiden UDFs können nicht zusammen in einem Skript verwendet werden. Also muss Zeile "include <Excel.au3>" raus
    • Die Datei ExcelConstants.au3 aus dem ZIP file muss auch noch in das Verzeichnis in dem Excel Rewrite.au3 liegt
  • Okay super danke! Ich bekomme schon "normalere" Fehlermeldungen...

    Jetzt muss ich noch versuchen mit dem Excel Rewrite ein Excel so zu öffnen, dass es in meiner GUI eingebettet wird und dass ich es dann als .xlsm file abspeichern kann. Aber bald ist Feierabend, dann werde ich mich wohl eher morgen da dran machen.

    Vielen Dank schon mal für deine Hilfe water! Ich hoffe von hier aus selbst so weit zu kommen, dass ich dieses Thema dann auf "gelöst" stellen kann :)

  • Water, vielen Dank für deine Hilfe!

    Ich bin mir sicher, dass ich mit etwas mehr Zeit noch auf eine funktionierende AutoIt Lösung gekommen wäre...

    Heute Morgen wurde mir aber leider gesagt, dass ich mein Tool morgen vorstellen muss. Nach ein Bisschen hin und her probieren, hab ich mich wegen Zeitdruck dann doch dafür entschieden, mein Excel File über n Excel Makro abzuspeichern und einfach in meinem AutoIt Script dieses Makro aufzurufen.

    Nochmal Danke für deine Hilfe! Ich bin mir sicher, dass hier jetzt genug Infos stehen, sodass ich dieses Thema jetzt auf gelöst setzte. Ich hoffe in meiner Freizeit bald mal die Zeit zu finden, deinen Lösungsvorschlag noch zu verwirklichen. :)

  • :)