2 Schleifen nacheinander laufen lassen

  • Hi Leute,

    wie kann man 2 verschiedene Schleifen hinteinander laufen lassen. Sprich ich möchte, das zunächst Funktion A 20 mal ausgeführt wird, sobald diese FUnktion endet soll Funktion B 20 mal ausgeführt werden. Aktuell muss ich immer warten bis Funktion A beendet ist und dann das Skript der FUnktion B öffnen und es manuell starten.

    #Region

    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

    Opt('MustDeclareVars', 1)

    #include <Excel.au3>

    Global $oExcel_1 = _Excel_Open()

    Global $var = "G:\x\x.xlsx"

    Global $oWorkbook = _Excel_BookOpen($oExcel_1,$var)

    WinActivate("Read ideal - Microsoft Excel")

    sleep(15000)

    Global $_readA, $_readB, $_readC,...

    Global $aRanges =...

    ...

    ...

    ...

    For $i = 0 To 19 Step 1

    $_readA = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][0])

    $_readB = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][1])

    $_readC = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][2])

    $_readD = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][3])

    $_readE = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][4])

    $_readF = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][5])

    .....

    ....

    Func A

    ....

    ....

    ....

    EndFunc


    Ich danke euch im vorraus für eure Aufmerksamkeit

    Gruß Bernd

  • Um die Laufzeit zu verkürzen würde ich das gesamte Arbeitsblatt in einen Array einlesen. Das geht viel schneller, da jeder Funktionsaufruf und jede Interaktion mit Excel Zeit kostet.

    Danach arbeitest Du nur noch mit dem Array.
    Beachte aber, dass der Index in Excel mit 1 beginnt, der Index eines Arrays aber mit 0. D.h. die 5. Zeile und 3. Spalte in Excel ist $aUsedRange[4][2]

  • #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

    Opt('MustDeclareVars', 1)

    Kleiner Hinweis für Bernd Albrecht (hat nichts mit Excel zu tun) :

    Der Au3Check_Parameter -d setzt laut Hilfe bereits die Option MustDeclareVars auf True (1).

    Die Zeile Opt('MustDeclareVars', 1) könnte man sich daher eigentlich sparen.

    Au3Check_Parameters

    Syntax:

    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

    The parameters set the app behaviour as follows:

    · -q : quiet mode (this will only show errors and warnings)

    ·  -d : set the "MustDeclareVars" option to True

    · -w 1 : give a warning if an include file is included more than once

    · -w 2 : give a warning if #comments-end (or #ce) is missing

    · -w 3 : give a warning if variables are already declared

    · -w 4 : give a warning if local variables are used in the global scope

    · -w 5 : give a warning if a local variable is declared but not used

    · -w 6 : give a warning when using Dim

    · -w 7 : give a warning if ByRef parameters are incorrect

    Allerdings gibt es feine Unterschiede, wie ich selbst ^^ mal im EN-Forum angemerkt habe :

    au3check_parameters-vs-optmustdeclarevars

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (19. September 2020 um 17:28)

  • water Danke für deinen Tipp, Aktuell bin ich mit meiner Range ziemlich zufrieden, es dauert immer zwar ca. 30-90 Sekunden bis das Skript alles geslesen hat und beginnt, aber diese paar sekunden stören mich nicht, es lief auch so bisher fehlerfrei ( PS: Das was ich oben reingeschriebn hatte ist nicht mein gesates Skript, da wo die Punkte sind, sind in wirklichkeit noch andere Sachen, Bspw. meine Range/Array/....

    Ich nehme anhand eurer Antworten an, das mein Vorhaben, 2 Schleifen hintereinander laufen zu lassen, nicht möglich ist und ich gewzungen bin diese immer seperat laufen lassen muss.

    Gruß Bernd

  • Ganz verstehe ich Dein Problem nicht. Hintereinander heißt für mich: Zuerst Schleife 1 20x zu durchlaufen, dann Schleife 2 20x.

    Also

    Code
    For $i = 0 To 19 ; Schleife 1
        ; Befehle für erste Schleife
    Next
    
    For $i = 0 To 19 ; Schleife 2
        ; Befehle für zweite Schleife
    Next

    Oder verstehe ich da was falsch?

  • Oder verstehe ich da was falsch?

    Falls ja, dann geht es mir ebenso ^^.

    Aktuell muss ich immer warten bis Funktion A beendet ist und dann das Skript der Funktion B öffnen und es manuell starten.

    Befinden sich Funktion A und Funktion B in zwei getrennten .au3-Skripten, oder wie soll man das interpretieren ? Könntest Du den Ablauf bitte deutlicher beschreiben ?

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Musashi und water

    ja, aktuell habe ich 2 Skripte für A und B.

    Der Aufbau meiner jeweils beiden Skripte ist wie schon oben von mir gezeigt, und nicht wie water gezeigt hat. ( FOr next...)

    2mal:

    #Region

    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

    Opt('MustDeclareVars', 1)

    #include <Excel.au3>

    Global $oExcel_1 = _Excel_Open()

    Global $var = "G:\x\x.xlsx"

    Global $oWorkbook = _Excel_BookOpen($oExcel_1,$var)

    WinActivate("Read ideal - Microsoft Excel")

    sleep(15000)

    Global $_readA, $_readB, $_readC,...

    Global $aRanges =...

    ...

    ...

    ...

    For $i = 0 To 19 Step 1

    $_readA = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][0])

    $_readB = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][1])

    $_readC = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][2])

    $_readD = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][3])

    $_readE = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][4])

    $_readF = _Excel_RangeRead($oWorkbook, Default, $aRanges[$i][5])

    .....

    ....

    XXXXXXXXX ($kordinater, $HWND ,$_readA, $_readB, $_readC, $_readD, $_readE, $_readF, $_readG, $_readH, $_readI, $_readJ,...)
    Next

    Func A

    ....Befehle

    ....

    ....

    EndFunc

    müsste ich nun eine zweite Funktion definieren ?Die Parameter meiner Zweiten funktion sind identisch mit meiner ersten.

    Gruß Bernd

  • Vorab : Auf meinem Home-Office-PC habe ich kein Excel, daher kann ich nur Vermutungen anstellen.

    müsste ich nun eine zweite Funktion definieren ? Die Parameter meiner zweiten Funktion sind identisch mit meiner ersten.

    Meiner Meinung nach JA (ggf. kannst Du sogar alle Schritte in einer Funktion abwickeln).

    Soweit ich das aus den vorliegenden Infos ableiten kann, sehe ich jedenfalls keinen Grund zwei eigenständige Skripte zu verwenden.

    PS: Das was ich oben reingeschrieben hatte ist nicht mein gesamtes Skript, da wo die Punkte sind, sind in Wirklichkeit noch andere Sachen, Bspw. meine Range/Array/....

    Was die Beurteilung nicht gerade erleichtert ;).

    Ich nehme anhand eurer Antworten an, das mein Vorhaben, 2 Schleifen hintereinander laufen zu lassen, nicht möglich ist und ich gezwungen bin diese immer seperat laufen lassen muss.

    Das ergibt für mich leider keinen Sinn. Natürlich ist es möglich zwei Schleifen hintereinander laufen zu lassen. Was genau meinst Du hier mit separat ?

    Ich habe den Eindruck, dass Dein Lösungsweg bereits vom Grundaufbau nicht unbedingt ideal ist.

    Den nachfolgenden Vorschlag von water halte ich z.B. für sehr sinnvoll :

    Um die Laufzeit zu verkürzen würde ich das gesamte Arbeitsblatt in einen Array einlesen. [...]

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Bitnugger 24. September 2020 um 13:02

    Hat den Titel des Themas von „2 Schleifen nacheindaer laufen lassen“ zu „2 Schleifen nacheinander laufen lassen“ geändert.