Excel Tab öffnen ohne Makros

  • Hallo zusammen,

    ich möchte gerne eine Excel-Tabelle öffnen und jedes Tabellenblatt einzeln als csv speichern.

    Dafür habe ich folgende Code geschrieben.

    [autoit]


    #include <Excel.au3>
    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $sFilePath1 = @ScriptDir & "\input.xls" ;This file should already exist
    $oExcel = _ExcelBookOpen($sFilePath1,0)

    [/autoit][autoit][/autoit][autoit]

    If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "Error!", "File does not exist - Shame on you!")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $aArray = _ExcelSheetList($oExcel)

    [/autoit][autoit][/autoit][autoit]

    for $i = 1 to $aArray[0]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : debug = ' & $aArray[$i] & @crlf) ;### Debug Console
    _ExcelSheetActivate($oExcel, $aArray[$i])
    _ExcelBookSaveAs($oExcel, @ScriptDir & "\Test_" & $aArray[$i], "csv", 0, 1, "ReadOnly","",1,3) ;Save the File as 'SaveAsExample2.xls"
    next

    [/autoit][autoit][/autoit][autoit]

    _ExcelBookClose($oExcel,0,0)

    [/autoit][autoit][/autoit][autoit]

    Exit

    [/autoit]

    Das klappt auch soweit.
    Jetzt hab ich aber das Problem, dass ich eine Excel-Tab habe in der unter Workbook_Open und Workbook_BeforeSave Code ausgeführt wird.
    Dieser Code erzeugt bei obigem Script aber einen Fehler.

    Weiß jemand ob ich eine Excel-Tab so öffnen kann, daß die in der Tab enthaltenen Makros nicht ausgeführt werden?

    Danke
    Superelmo

    • Offizieller Beitrag

    Weiß jemand ob ich eine Excel-Tab so öffnen kann, daß die in der Tab enthaltenen Makros nicht ausgeführt werden?


    Wenn das Makro beim Öffnen der Tabelle automatisch ausgeführt wird, hat diese folgende Eigenschaft:
    ActiveWorkbook.RunAutoMacros = xlAutoActivate

    D.h., die beim Laden der Tabelle vorliegende Eigenschaft bestimmt, ob das Makro gestartet wird oder nicht.
    Du kannst also nicht die Tabelle laden und dann Ändern auf nicht Ausführen.
    Wenn du das möchtest, solltest du das Makro erst nach einer Abfrage (Ja/Nein) starten, das kannst du dann programmtechnisch steuern und der User muß halt einen Klick mehr machen.

    Falls du doch Aktivieren/Deaktivieren testen möchtest, so wird es eingesetzt:

    [autoit]

    Const $xlAutoActivate = 3
    Const $xlAutoDeactivate = 4
    $oExcel.ActiveWorkbook.RunAutoMacros($xlAutoDeactivate)

    [/autoit]
  • Hallo,

    ok, an das Öffnen Makro komme ich also nicht so direkt ran. Wie sieht es den mit BeforeSave aus?

    Das ist auch eher das was Streß macht.


    Gruß
    Superelmo

    P.S. Soll übrigens ein xls2csv converter werden. Hat hierfür vielleicht schon jemand ne fertige Lösung.

    • Offizieller Beitrag

    Wie sieht es den mit BeforeSave aus?


    Das ist ähnlich, wie beim Makro. Die Sub 'BeforeSave' wird ausgeführt, wenn sie existiert. Du könntest evtl. in diese Sub eine Bedingung einbauen, unter der die Sub abgebrochen wird. Mußt du dir eine entsprechende Bedingung schaffen, die dazu geeignet ist.