Varibalen Einsatz?

  • Hallo zusammen,

    ich habe mir gerade ein Script erstellt (aufgenommen ^^) womit ich bestimmte Einstellungen in Excel-Dokumente ändere (Kopfzeile = Dateiname) und diese dann automatisch ausdrucke. Die Dateien werden beim Start von Excel direkt geöffnet und nach dem Drucken automatisch geschlossen.
    Ich habe das Script nun für eine Datei aufgenommen und an meine Anforderungen angepasst, allerdings nur für eine Datei. Da der Dateiname sich immer nur aufgrund des Datums unterscheidet, würde ich die gerne mit Einsatz von Variablen lösen, oder gibt es eine bessere Methode?
    Hier mal mein Quellcode:

    [autoit]


    WinWait("Microsoft Excel - OK_FFM_2008-09-01","")
    If Not WinActive("Microsoft Excel - OK_FFM_2008-09-01","") Then WinActivate("Microsoft Excel - OK_FFM_2008-09-01","")
    WinWaitActive("Microsoft Excel - OK_FFM_2008-09-01","")
    Send("{ALTDOWN}a{ALTUP}{DOWN}{DOWN}{DOWN}{ENTER}")
    WinWait("Seite einrichten","")
    If Not WinActive("Seite einrichten","") Then WinActivate("Seite einrichten","")
    WinWaitActive("Seite einrichten","")
    Send("{TAB}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}{ENTER}")
    WinWait("Microsoft Excel - OK_FFM_2008-09-01","")
    If Not WinActive("Microsoft Excel - OK_FFM_2008-09-01","") Then WinActivate("Microsoft Excel - OK_FFM_2008-09-01","")
    WinWaitActive("Microsoft Excel - OK_FFM_2008-09-01","")
    Send("{CTRLDOWN}p{CTRLUP}{SHIFTDOWN}{TAB}{TAB}{TAB}{SHIFTUP}1{TAB}1{ENTER}")
    WinWait("Microsoft Excel - OK_FFM_2008-09-01","")
    If Not WinActive("Microsoft Excel - OK_FFM_2008-09-01","") Then WinActivate("Microsoft Excel - OK_FFM_2008-09-01","")
    WinWaitActive("Microsoft Excel - OK_FFM_2008-09-01","")
    Send("{ALTDOWN}d{ALTUP}{DOWN}{ENTER}")
    WinWait("Microsoft Excel","")
    If Not WinActive("Microsoft Excel","") Then WinActivate("Microsoft Excel","")
    WinWaitActive("Microsoft Excel","")
    Send("{ENTER}")

    [/autoit]

    Vorschläge? .. Es sind Monatsauswertungen, die mit dem Dateinamen versehen werden müssen.
    Danke für Eure HILFE!! ?(

    Einmal editiert, zuletzt von play0rr (5. September 2008 um 14:02)

  • Hi,

    guck mal in der Hilfe unter macros. Da findest du sowas wie @Year oder @MDAY usw.

    Mega

    Hallo,

    das Problem besteht eher darin, dass ich absolut nicht weiß wie ich ein Makro in mein Script integriere, dachte da eher an eine variable, der ich nach jedem Drucken bzw. schließen einen neuen Wert, nämlich das neue Datum zuweise oder hochzähle?
    War das für euch verständlich? :)

    /EDIT: statt der ...-01.xls vielleicht sowas wie varible "a" in der ersten zeile sag ich einfach Dim "a" as 01 oder so? .. ka :/

  • Ich würds mit

    [autoit]

    WinWait("Microsoft Excel - OK_FFM_","")

    [/autoit]


    ...probieren, normalerweise wird das Fenster trotzdem erkannt.

  • Wenn die Dateien automatisch geöffnet werden, nicht von Autoit, dann brauchst du keine Variablen
    So reicht es doch auch.

    [autoit]

    WinWait("Microsoft Excel - ")

    [/autoit]

    #


    EDIT: Zu langsam

    Wenn es eine Möglichkeit gäbe, die Dateien auch noch mit Autoit zu öffnen, wäre ich sehr danbar wenn mir das vielleicht Jemand mal erklären könnte?! Absolutes Neuland, sorry!

  • Hab' nicht getestet, aber wenn das Skript im Ordner mit den xls-dateien ist, sollte es funktionieren.


    [autoit]

    $search = FileFindFirstFile("*.xls")

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

    ; Check if the search was successful
    If $search = -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    ShellExecute($File)

    Seite_anpassen() ; dein Skript
    WinClose("Microsoft Excel -")
    WEnd

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

    ; Close the search handle
    FileClose($search)

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

    Func Seite_anpassen()
    WinWait("Microsoft Excel -","")
    If Not WinActive("Microsoft Excel -","") Then WinActivate("Microsoft Excel -","")
    WinWaitActive("Microsoft Excel -","")
    Send("{ALTDOWN}a{ALTUP}{DOWN}{DOWN}{DOWN}{ENTER}")
    WinWait("Seite einrichten","")
    If Not WinActive("Seite einrichten","") Then WinActivate("Seite einrichten","")
    WinWaitActive("Seite einrichten","")
    Send("{TAB}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}{ENTER}")
    WinWait("Microsoft Excel -","")
    If Not WinActive("Microsoft Excel -","") Then WinActivate("Microsoft Excel -","")
    WinWaitActive("Microsoft Excel -","")
    Send("{CTRLDOWN}p{CTRLUP}{SHIFTDOWN}{TAB}{TAB}{TAB}{SHIFTUP}1{TAB}1{ENTER}")
    WinWait("Microsoft Excel -","")
    If Not WinActive("Microsoft Excel -","") Then WinActivate("Microsoft Excel -","")
    WinWaitActive("Microsoft Excel -","")
    Send("{ALTDOWN}d{ALTUP}{DOWN}{ENTER}")
    WinWait("Microsoft Excel","")
    If Not WinActive("Microsoft Excel","") Then WinActivate("Microsoft Excel","")
    WinWaitActive("Microsoft Excel","")
    Send("{ENTER}")
    EndFunc

    [/autoit]
  • Funkey, du bist mein Held, dein Script rennt rennt rennt, geil :)
    Kannst mir das noch bisschen erklären was da genau gemacht wird bitte?

    Wie meinst du das mit

    [autoit]

    Send("!di")

    [/autoit]

    ?? Komm ich damit direkt zur "Seite Einrichten" ?
    und mit

    [autoit]

    Send("{Down 6}")

    [/autoit]

    kann ich was erreichen?

  • Nur nochmal für mich zum Verständnis, also

    Zuerst wird die variable $search deklariert, um im Verzeichnis nach Excel-Dokumenten zu suchen ja?
    Durch die If-Schleife wird geprüft, ob Dokumente vorhanden, falls ja, dann in die While-Schleife, fall nein, Msgbox "bla nix vorhanden was excel is"

    In der While-schleife wird so lange die Funktion angewendet, bis er kein Dokument mehr findet (von oben nach unten wird vorgegangen?) ja?

    Im Grunde recht einfach, allerdings versteh ich die Werte -1 bei der $search variablen nicht und die 1 bei While :(
    Sorry, aber wenn ich das Script nicht verstehe, dann brauch ich es auch nicht benutzen :)

  • Du hast eigentlich alles verstanden.

    'While 1' oder auch 'While True' wiederholt den Vorgang bis zum WEnd immer und immer wieder. 1 = Immer
    Diese Schleife wird nur durch ExitLoop oder Exit beendet.

    Schau dir mal die Hilfe zu FileFindFirstFile an. Wenn keine Datei gefunden wird, dann gibt diese Funktion -1 zurück, das kann dann ausgewertet werden.

  • Ah, dadurch, dass $search als "FileFindFirstFile" deklariert wurde, bekommt man, falls keine .xls datei vorhanden ist, den Wert -1 zurück und If $variable = -1 Then MsgBox (Blub nix da) ... aber falls doch ne Excel datei da ist, bekommt man den Wert 1 (für TRUE) zurück und das startet dann die While-Schleife oder?

    Die Schleife verarbeitet dann den Stapel (Anzahl der Dokumente im Ordner) man erhält nen Error und verlässt die While-Schleife durch ExitLoop?