Filename welcher in einer (autoit) variablen steht an ein Excel makro übergeben ..

  • Hai all,
    habe da mal wieder eine Frage an die Profis,
    (wobei ich schon sehe, dass es sich ggf. eigentlich eher um ein VBA Problem/Thread handelt. Aber ich sicherlich nicht der Einzige sein sollte, der dieses Problem hat)

    Sollte ich trotz intensiver Suche einen entsprechenden Thread übersehen haben, Asche auf mein Haupt :!: :!: :S


    Also folgende Challenge habe ich:
    Innerhalb eines Autoit Scriptes werden Dateinamen (xyz.txt, 123.txt ...) on demand ermittelt und in Variablen geschrieben.
    Danach 'passiert' mit den Dateien einiges, bis diese letztendlich den endgültigen Status erreicht haben und abgespeichert werden (alles noch autoit).
    Im nächsten Schritt werden/müssen die Dateien mit Excel geöffnet und mittels eines VBA Scriptes weiterverarbeitet ....

    Soweit funktioniert dies auch bis auf die Tatsache, dass es mir nicht gelingt die bereits im AutoIT bekannten Dateinamen aus den entsprechenden Variablen bzw. die Variable selbst an das VBA Script zu übergeben, um dort den Dateinamen bekannt zumachen (zum Öffnen dieser Datei). Zur Zeit verwende ich noch den 'absoluten' Namen :( (was aufgrund der wechselnden Dateinamen nicht praktikabel ist)
    IST: Workbooks.OpenText Filename:="H:\123.txt" ------> SOLL: Workbooks.OpenText Filename:=$filenametxt
    (wobei (AutoIT Variable) $filenametxt = "H:\123.txt")

    hier ein Auszug aus den beiden Scripts

    1.) AutoIT Script
    $filenametxt = StringReplace($extract, ".zip",".txt") ;Variable die den Dateinamen im AutoIT Script zugewiesen hat ((z.Bsp. 123.txt)
    .....
    $sFilePath = "h:\Test.xls" ; Excel Datei mit dem weiterverarbeitenden Excel Makro
    $oExcel = ObjCreate("Excel.Application") ; Excel öffnen
    With $oExcel
    .Visible = $fVisible
    .WorkBooks.Open($sFilePath)
    .ActiveWorkbook.Sheets(1).Select ()
    $x = .Run("Makro1") ; MacroName
    EndWith

    2. VBA Script
    Workbooks.OpenText Filename:="H:\123.txt", Origin:=xlWindows, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:= _
    Array(Array(0, 1), Array(41, 1), Array(89, 1), Array(99, 1), Array(108, 1), Array(185, 1)) _
    , TrailingMinusNumbers:=True
    .....
    Application.CutCopyMode = False
    Windows("Test.xls").Activate
    ActiveWorkbook.Close False
    Application.ScreenUpdating = True


    Für jede Anregung wäre ich dankbar ....
    Danke schon einmal im voraus ...

    Chris

  • mmm .. also direkt übergeben geht nicht ..

    soweit ich weis .. aber mit UMWEG ..

    was hällst du von einer *.ini ..

    welche du mit auto It beschreibst .. ( alle datei namen )

    und dann mit VBS wieder ausließt ?!

    .. oder mit einem REG Eintrag ?

    hab ich bein n paar skripten drinne, welche mit anderen kommunizieren sollten bzw müssen ..

    ist in auto it nur eine zeile .. und funktioniert absolut SUPER !!

    muste halt nur manchmal mit m timing aufpassen .. eventuell handshakes einrichten ..

    .. oder auf irgend welche acknowledge warten ..

    aber bei deinen fsten datei namen .. seh ich da jetzt mal gar kein problem ..

    rein schreiben .. dann vbs starten .. .. und dass liest dann als erstes mal die reg aus .. die werte in variablen ..

    fertig ..

    dürfte nix schief gehen .. denke ich jetzt mal ..

  • Hi,
    teste mal dies hier


    MfG
    Der_Doc

  • Sorry das war VB .... manchmal veralbert mich Google.
    Aber an der Arbeit habe ich ein Script da werden Parameter an Access (VBA) übergeben.
    Ich schaue morgen mal.

    MfG
    Der_Doc

    Einmal editiert, zuletzt von Der_Doc (11. November 2009 um 18:53)

  • Hai all,


    also ich habe inzwischen eine gangbaren Weg gefunden - nicht charmant - aber es funzt .......
    ich schreibe den Filename in eine temp. Text Datei und hole die mit Excel wieder raus ...

    (also ähnlich wie der Vorschlag von vivus).

    Blöd ist nur das sich das temp File (warum auch immer) nicht mit dem letztem Befehl entweder im Excel Makro (Kill ....) oder im AutoIT Script (FileDelete ....) löschen lässt. Scheint irgendwie noch im Zugriff zu sein.

    Vielleicht hat ja jemand noch eine Idee.


    Allen ansonsten ein DANKE SCHÖN


    Gruss
    Chris :thumbup: