Next with no matching For Statement

  • Hallo,
    ich habe hier mal meinen eigentlich relativ simplem Programmtext. Leider wird mir jedesmal angezeigt Next with no matching For statement. Wenn ich ein If mit Endif beende läuft das Programm aber nicht richtig.

    [autoit]

    Func Groupwise($Nutzernamenliste)

    Local $i, $Passwort, $error

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

    For $j = 1 To $Passwortanzahl Step 1 ;~Austesten aller eingegebenen Passwörter
    $Spaltenposition = $j + 1

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

    ;~Passwortzuordnung
    If $j = 1 Then
    $Passwort = $StdPasw1
    MsgBox(1,"Passwort","Initialisiere Passwort 1")
    EndIf

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

    If $j = 2 Then
    $Passwort = $StdPasw2
    MsgBox(1,"Passwort","Initialisiere Passwort 2")
    EndIf

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

    If $j = 3 Then
    $Passwort = $StdPasw3
    MsgBox(1,"Passwort","Initialisiere Passwort 3")
    EndIf

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

    MsgBox(1,"Passwortdurchlauf","Nummer" & $j & " Passwort "& $Passwort) ;~Testabfrage

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

    For $i = 1 To $Zeilengroesse Step 1 ;~Schleife mit Anzahl der Nutzernamen

    WinClose("Novell GroupWise - Mailbox")
    MsgBox(1,"Nutzernamendurchlauf","Nutzernamendurchlauf "& $i & " "&$Nutzernamenliste[$i][1])
    $error = ShellExecute("C:\Novell\GroupWise\grpwise.exe","/@u-"& $Nutzernamenliste[$i][1]) ;~Ausführen von Gorupwise mit Nutzer als Parameter
    ;~ If $error = 0 Then MsgBox(1,"","")

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

    WinWaitActive("GroupWise-Passwort")
    Send($Passwort) ;~Sendet das aktuelle Passwort
    Send("{ENTER}")
    Sleep(5000)

    If WinExists("Novell GroupWise - Mailbox") Then
    WinClose("Novell GroupWise - Mailbox")
    Sleep(5000)

    If WinExists("Dialogfeld") Then
    WinClose("Dialogfeld")
    Sleep(2000)
    MsgBox(1,"Fehlgeschlagen","Fehlgeschlagen")

    If WinExists("Novell GroupWise Startup") Then
    WinClose("Novell GroupWise Startup")
    MsgBox(1,"Error","Error")

    EndIf

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

    Next

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

    Next

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

    EndFunc

    [/autoit]
  • Hallo,

    der Fehler wird in Zeile 294 angezeigt. Ich habe das Programm laufen lassen mit zwei if anweisungen und einer Endif sowie einem If mit einem Endif. Das hat funktioniert. In der Hilfe Datei werden zwar nur zwei Ifs und mit einer Endif verwendet und nicht drei, aber ich nehme dennoch an, dass dies auch funktionieren sollte.
    Das Programm läuft seltsamerweise nicht richtig ab, wenn ich jedes IF einzelnt schließe. Ich bin da echt am verzweifeln ;(

    • Offizieller Beitrag

    Das Programm läuft seltsamerweise nicht richtig ab, wenn ich jedes IF einzelnt schließe. Ich bin da echt am verzweifeln ;(

    Deine Logik können wir nicht nachvollziehen. Deshalb immer sauber einrücken, dann wird das klar.
    Kann ja sein, dass du folgendes möchtest:

    [autoit]

    If WinExists("Novell GroupWise - Mailbox") Then
    WinClose("Novell GroupWise - Mailbox")
    Sleep(5000)
    If WinExists("Dialogfeld") Then
    WinClose("Dialogfeld")
    Sleep(2000)
    MsgBox(1,"Fehlgeschlagen","Fehlgeschlagen")
    EndIf
    EndIf

    [/autoit]

    Aber das können wir nicht erahnen. Du mußt ja wissen, wann welche Dialoge erscheinen und danach deine Programmlogik gestalten.

  • n der Hilfe Datei werden zwar nur zwei Ifs und mit einer Endif verwendet und nicht drei, aber ich nehme dennoch an, dass dies auch funktionieren sollte.
    [...]
    Das Programm läuft seltsamerweise nicht richtig ab, wenn ich jedes IF einzelnt schließe


    Ich nehme an der Denkfehler liegt darin das nur einzeilige If-Then-Verzweigungen kein abschließendes EndIf brauchen.
    Also als Beispiel sowas:

    [autoit]

    If 2>1 Then msgbox(0,"", "Mathe stimmt")

    [/autoit]


    Sobald die Msgbox aber in die nächste Zeile gerät wird es ein mehrzeiliges If-Then-EndIf und muss auch entsprechend mit EndIf geschlossen werden.
    Daher fehlen bei dir, wie schon berichtet, schlicht 2 EndIf.

  • ich schließe mich SeuBo an und sage: Zeile 41 + 46 ==> EndIf und der Tag ist Dein Freund

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...