Loop ohne Do (ist aber im Code vorhanden)

  • VB6

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von dersuchende.

    Loop ohne Do (ist aber im Code vorhanden)

    Hallo,

    ich habe eine Programm Routine mit mehreren Do - Loop Schleifen programmiert.

    Bisher lief alles einwandfrei, nun habe ich nach einer Änderung (leider vergessen was das war, es waren viele..) beim Neustart des Programms die Meldung bekommen "Fehler beim Kompilieren: Loop ohne Do". Wenn ich aber im Code nach oben gehe, dann steht da brav das erforderliche Do. Nun weiß ich aus Power Basic, dass in der Schleife eventuell eine If - Then Schleife nicht korrekt ist, also alle If-Then Schleifen mit Strichen verbunden - alles o.K., nur das Programm will immer noch nicht. Also die anderen Do Loop Schleifen in gleicher Weise getestet - alles o.K.. - Was kann das sein?

    Ich habe noch ein weiteres Problem gehabt. Beim Programm-Start wurde moniert, dass im Modul 1 das Projekt-Formular XXX.vbP fehlerhaft sei, der Code wurde angezeigt - alles rot. Dieses Modul war aber bisher nicht vorhanden, aber der Inhalt der Projekt-Datei XXX.vbp ist brav im Code weiterhin vorhanden. Ich habe deshalb das Modul 1 aus dem Programm mit Anklicken und rechte Maustaste entfernt.

    Beim Vergleich mit früheren Versionen des Programms kann ich in der Projekt-Datei XXX.vbp keinen Unterschied entdecken, nur die Anordnung der Programmeteile ist etwas geändert (es war eine sehr alte Version). Wo finde ich Hinweise, was dieses Modul tut (der Hinweis bei msdn-microsoft.. war etwas knapp, der sagt mir nix)? Kann ich im Inhalt etwas ändern (beispielsweise Reihenfolgen der Programm-Formulare (spielt die Reihenfolge eine Rolle - außer bei der Übersichtlichkeit beim Kontrollieren?)), nach welchen Kriterien muss ich vorgehen?

    Ich habe keinen Quell-Code beigefügt, weil ich das verfahren noch nicht durchschaue..

    Mein Wissen über VB 6 ist eher knapp, ich kam von Power Basic her und habe mir Einiges erklären lassen.

    Wer kann mir auf die Sprünge helfen, ich bin arg im Druck.

    Herzlichen Dank im Voraus.

    speidergutt


    Verschoben nach sonstige Problemstellungen
    -Artentus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Artentus“ ()

    dersuchende schrieb:

    Was kann das sein?
    Möglicherweise hast Du 2 Block-Begrenzer getauscht, von:

    Visual Basic-Quellcode

    1. Do
    2. 'xxx
    3. Loop
    4. If bla Then
    5. 'yyy
    6. End If
    nach

    Visual Basic-Quellcode

    1. Do
    2. 'xxx
    3. If bla Then ' hier 1
    4. Loop ' hier 2
    5. 'yyy
    6. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mach dir eine Kopie von dem Code und lösche einen Do-Loop Block nach dem Anderen. So sollte am Ende das "Fehlerhafte" übrig bleiben.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Loop ohne Do (ist aber im Code vorhanden)

    Hallo Schamash,

    Danke für den Tipp: ich habe den ersten Do-Loop Strang auskommentiert, nun wäre der Fehler eingekreist, am Ende dieses Codeteils stand auch die Fehlermeldung.

    ABER: ich kann in dem Teil keinen Fehler entdecken: alle If-Then sind in sich geschlossen, das Do steht am Anfang und am Schluss Loop, ich habe auch Do und Loop jeweils gelöscht und an gleicher Stelle nochmals eingetippt, beide Worte stehen exakt 13 Stellen vom Rand (weil ich dachte, vielleicht moniert das Programm unterschiedliche Randabstände..).

    Ich bin weiter ratlos.

    dersuchende
    Dateien
    • DoLoop.frm

      (702 Byte, 119 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „dersuchende“ () aus folgendem Grund: Programm-Code Schnipsel eingefügt

    @dersuchende
    in der .frm gibt es keinen Code.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @dersuchende Jou. Dies ist die VB-Projektdatei, nicht aber die betreffende fehlerhafte.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Tja, da habe ich das Video wohl nicht ganz verstanden..

    Ich versuch's mal mit Copy and Paste.
    Hat geklappt, hier ist das fragliche Code-Schnipsel:

    Do
    ' Hier wird nur Phase 1 und 2 berechnet, Auffüllen Tasse

    ' dt = 1 / 10000 ' Normalversion
    ' dt = 1 / 20 ' Test-Versionen
    dt = 1 / 5

    n = n + 1
    t1 = n * dt

    flaeche = lange * quer
    lange1 = langex
    quer1 = querx

    If n > 1 Then
    mpunkrlee = 1.2 * 10 ^ (-10) * (windgeschw * 100) ^ 0.78 * (langex * 100) ^ 0.89 * _
    (querx * 100) * ((mglache * partdruck * 10 ^ 3) / betemp) ' CGS-System
    End If

    mla = mla + ms * dt - (mpunkrlee * dt) / 1000
    flaechew = mla * 1000 / (rhoflache * hpf) ' 1000 weil hpf in mm
    ein = ein + ms * dt
    mpunkt = mpunkt + mpunkrlee * dt / 1000

    If mla = 0.999 * mpunkt And mla < 1.001 * mpunkt Then
    hpfx = mla * 1000 / (rhoflache * flaechew)
    flaechew = flaechew
    te = t1
    Stop
    Exit Do
    End

    If flaechew < flaeche Then
    hpfx = mla * 1000 / (rhoflache * flaechew)
    If hpfx > 5 Then
    hpfx = 5
    flaechew = mla * 1000 / (rhoflache * 5)
    End If
    ElseIf flaechew >= flaeche Then
    flaechew = flaeche
    hpfx = mla * 1000 / (rhoflache * flaeche)
    End If

    If t1 < 30 And lachesec >= 30 Then
    md30 = md30 + mpunkrlee / 1000 * dt
    ElseIf lachesec < 30 And t1 < lachesec Then
    md30 = md30 + mpunkrlee / 1000 * dt
    End If

    If flaechew < flaeche Then ' Anfang, Tassenboden nicht bedeckt, Quadrat
    a1 = 1
    B = 0.5 * (lange + quer)
    c = -(mla + ms * dt / 2 - mpunkrlee * 1 / 1000) / (rhoflache * hpf)
    a = ((-B + Sqr(B ^ 2 - 4 * a1 * c)) / (2 * a1))

    langex = langex + a
    querx = querx + a ' Formeln mit a aus Phase 5
    hpfx = mla * 1000 / (rhoflache * flaeche)

    ElseIf flaechew = flaeche Then
    ' Tassenboden ganz bedeckt, Rechteck

    querx = quer
    langex = lange
    hpfx = mla * 1000 / (rhoflache * flaeche)

    If hpfx > 0.9999 * hta And hta < 1.0001 * hta Then
    ' Tasse läuft über, freie Lache,
    tv = t1
    End If

    If hpfx >= hta + 10 Then ' Tasse ist übergelaufen, freie Lache,
    hpfx = hta ' Ausstiegskriterium
    langex = lange
    querx = quer
    flaechew = flaeche
    Exit Do
    End If
    End If

    If mla < 0.001 And n > 10 Then
    flaechew = 0
    hpfx = 0
    mpunkrlee = mpunkrlee
    Exit Do
    End If

    If t1 > 0.999 * lachesec Then
    flaechew = flaechew
    mpunkrlee = mpunkrlee
    hpfx = hpfw
    tv = t1
    Exit Do
    End If

    If (t1 > 10 And t1 < 20) Then
    Printer.Print " 1- t1 ="; t1; " tv = "; tv; " mla ="; mla; " md30 ="; md30
    Printer.Print " mpunkrlee ="; mpunkrlee; " flaechew ="; flaechew; " hpfx = "; hpfx
    End If
    Loop


    speidergutt
    @dersuchende Kannst Du mal alle Variablendeklarationen zu diesem Code posten?
    -----

    Visual Basic-Quellcode

    1. If mla = 0.999 * mpunkt And mla < 1.001 * mpunkt Then
    Da ist eine Zuweisung im If-Statement, das ist in Basic nicht möglich.
    ----
    Vor dem Loop ganz unten oder halt an der richtigen Stelle fehlt ein End If.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    RodFromGermany schrieb:

    Da ist eine Zuweisung im If-Statement, das ist in Basic nicht möglich.


    Das ist keine Zuweisung sondern ein normaler Vergleich ;)
    Und funktioniert deswegen schon.

    Visual Basic-Quellcode

    1. Dim mla As Double
    2. Dim mpunkt As Double
    3. mpunkt = 2.1
    4. mla = 1.5
    5. If mla = 0.999 * mpunkt And mla < 1.001 * mpunkt Then
    6. Debug.Print "Gut"
    7. Else
    8. Debug.Print "Nix Gut"
    9. End If


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    normaler Vergleich
    Korrekt.
    Ich hab da ein C/C++/C#-== erwartet. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Noyne Die Idee hatte ich auch, das ist aber nicht so, weil das End If weiter unten in der Source steht. An die Stelle muss ein Else hin. Dann sollte es gehen (wenn ich den Quellcode richtig gelesen habe, ist schwierig ohne VB-Tag...)

    ichduersie schrieb:

    weil das End If weiter unten in der Source steht
    Ne, ich seh kein End If weiter unten, dass mit einem Else zu tun haben könnte. Das End If weiter unten gehört meiner Meinung nach zu dem vorherigen Else
    Ich bleib dabei ... Das müsste End If heißen und nicht nur End

    VB.NET-Quellcode

    1. Do
    2. ' Hier wird nur Phase 1 und 2 berechnet, Auffüllen Tasse
    3. ' dt = 1 / 10000 ' Normalversion
    4. ' dt = 1 / 20 ' Test-Versionen
    5. dt = 1 / 5
    6. n = n + 1
    7. t1 = n * dt
    8. flaeche = lange * quer
    9. lange1 = langex
    10. quer1 = querx
    11. If n > 1 Then
    12. mpunkrlee = 1.2 * 10 ^ (-10) * (windgeschw * 100) ^ 0.78 * (langex * 100) ^ 0.89 * _
    13. (querx * 100) * ((mglache * partdruck * 10 ^ 3) / betemp) ' CGS-System
    14. End If
    15. mla = mla + ms * dt - (mpunkrlee * dt) / 1000
    16. flaechew = mla * 1000 / (rhoflache * hpf) ' 1000 weil hpf in mm
    17. ein = ein + ms * dt
    18. mpunkt = mpunkt + mpunkrlee * dt / 1000
    19. If mla = 0.999 * mpunkt And mla < 1.001 * mpunkt Then
    20. hpfx = mla * 1000 / (rhoflache * flaechew)
    21. flaechew = flaechew
    22. te = t1
    23. Stop
    24. Exit Do
    25. End
    26. If flaechew < flaeche Then
    27. hpfx = mla * 1000 / (rhoflache * flaechew)
    28. If hpfx > 5 Then
    29. hpfx = 5
    30. flaechew = mla * 1000 / (rhoflache * 5)
    31. End If
    32. ElseIf flaechew >= flaeche Then
    33. flaechew = flaeche
    34. hpfx = mla * 1000 / (rhoflache * flaeche)
    35. End If
    36. If t1 < 30 And lachesec >= 30 Then
    37. md30 = md30 + mpunkrlee / 1000 * dt
    38. ElseIf lachesec < 30 And t1 < lachesec Then
    39. md30 = md30 + mpunkrlee / 1000 * dt
    40. End If
    41. If flaechew < flaeche Then ' Anfang, Tassenboden nicht bedeckt, Quadrat
    42. a1 = 1
    43. B = 0.5 * (lange + quer)
    44. c = -(mla + ms * dt / 2 - mpunkrlee * 1 / 1000) / (rhoflache * hpf)
    45. a = ((-B + Sqr(B ^ 2 - 4 * a1 * c)) / (2 * a1))
    46. langex = langex + a
    47. querx = querx + a ' Formeln mit a aus Phase 5
    48. hpfx = mla * 1000 / (rhoflache * flaeche)
    49. ElseIf flaechew = flaeche Then
    50. ' Tassenboden ganz bedeckt, Rechteck
    51. querx = quer
    52. langex = lange
    53. hpfx = mla * 1000 / (rhoflache * flaeche)
    54. If hpfx > 0.9999 * hta And hta < 1.0001 * hta Then
    55. ' Tasse läuft über, freie Lache,
    56. tv = t1
    57. End If
    58. If hpfx >= hta + 10 Then ' Tasse ist übergelaufen, freie Lache,
    59. hpfx = hta ' Ausstiegskriterium
    60. langex = lange
    61. querx = quer
    62. flaechew = flaeche
    63. Exit Do
    64. End If
    65. End If
    66. If mla < 0.001 And n > 10 Then
    67. flaechew = 0
    68. hpfx = 0
    69. mpunkrlee = mpunkrlee
    70. Exit Do
    71. End If
    72. If t1 > 0.999 * lachesec Then
    73. flaechew = flaechew
    74. mpunkrlee = mpunkrlee
    75. hpfx = hpfw
    76. tv = t1
    77. Exit Do
    78. End If
    79. If (t1 > 10 And t1 < 20) Then
    80. Printer.Print " 1- t1 ="; t1; " tv = "; tv; " mla ="; mla; " md30 ="; md30
    81. Printer.Print " mpunkrlee ="; mpunkrlee; " flaechew ="; flaechew; " hpfx = "; hpfx
    82. End If
    83. Loop

    Your computer is running... You better go chase it! :P :D
    Ich stimme @Nyone zu

    siehe "formatierter Code"
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Do
    2. ' Hier wird nur Phase 1 und 2 berechnet, Auffüllen Tasse
    3. ' dt = 1 / 10000 ' Normalversion
    4. ' dt = 1 / 20 ' Test-Versionen
    5. dt = 1 / 5
    6. n = n + 1
    7. t1 = n * dt
    8. flaeche = lange * quer
    9. lange1 = langex
    10. quer1 = querx
    11. If n > 1 Then
    12. mpunkrlee = 1.2 * 10 ^ (-10) * (windgeschw * 100) ^ 0.78 * (langex * 100) ^ 0.89 * (querx * 100) * ((mglache * partdruck * 10 ^ 3) / betemp) ' CGS-System
    13. End If
    14. mla = mla + ms * dt - (mpunkrlee * dt) / 1000
    15. flaechew = mla * 1000 / (rhoflache * hpf) ' 1000 weil hpf in mm
    16. ein = ein + ms * dt
    17. mpunkt = mpunkt + mpunkrlee * dt / 1000
    18. If mla = 0.999 * mpunkt And mla < 1.001 * mpunkt Then
    19. hpfx = mla * 1000 / (rhoflache * flaechew)
    20. flaechew = flaechew
    21. te = t1
    22. Stop
    23. Exit Do
    24. End ' <---------------------------------------- Hier fehlt das If
    25. If flaechew < flaeche Then
    26. hpfx = mla * 1000 / (rhoflache * flaechew)
    27. If hpfx > 5 Then
    28. hpfx = 5
    29. flaechew = mla * 1000 / (rhoflache * 5)
    30. End If
    31. ElseIf flaechew >= flaeche Then
    32. flaechew = flaeche
    33. hpfx = mla * 1000 / (rhoflache * flaeche)
    34. End If
    35. If t1 < 30 And lachesec >= 30 Then
    36. md30 = md30 + mpunkrlee / 1000 * dt
    37. ElseIf lachesec < 30 And t1 < lachesec Then
    38. md30 = md30 + mpunkrlee / 1000 * dt
    39. End If
    40. If flaechew < flaeche Then ' Anfang, Tassenboden nicht bedeckt, Quadrat
    41. a1 = 1
    42. B = 0.5 * (lange + quer)
    43. c = -(mla + ms * dt / 2 - mpunkrlee * 1 / 1000) / (rhoflache * hpf)
    44. a = ((-B + Sqr(B ^ 2 - 4 * a1 * c)) / (2 * a1))
    45. langex = langex + a
    46. querx = querx + a ' Formeln mit a aus Phase 5
    47. hpfx = mla * 1000 / (rhoflache * flaeche)
    48. ElseIf flaechew = flaeche Then
    49. ' Tassenboden ganz bedeckt, Rechteck
    50. querx = quer
    51. langex = lange
    52. hpfx = mla * 1000 / (rhoflache * flaeche)
    53. If hpfx > 0.9999 * hta And hta < 1.0001 * hta Then
    54. ' Tasse läuft über, freie Lache,
    55. tv = t1
    56. End If
    57. If hpfx >= hta + 10 Then ' Tasse ist übergelaufen, freie Lache,
    58. hpfx = hta ' Ausstiegskriterium
    59. langex = lange
    60. querx = quer
    61. flaechew = flaeche
    62. Exit Do
    63. End If
    64. End If
    65. If mla < 0.001 And n > 10 Then
    66. flaechew = 0
    67. hpfx = 0
    68. mpunkrlee = mpunkrlee
    69. Exit Do
    70. End If
    71. If t1 > 0.999 * lachesec Then
    72. flaechew = flaechew
    73. mpunkrlee = mpunkrlee
    74. hpfx = hpfw
    75. tv = t1
    76. Exit Do
    77. End If
    78. If (t1 > 10 And t1 < 20) Then
    79. Printer.Print " 1- t1 ="; t1; " tv = "; tv; " mla ="; mla; " md30 ="; md30
    80. Printer.Print " mpunkrlee ="; mpunkrlee; " flaechew ="; flaechew; " hpfx = "; hpfx
    81. End If
    82. Loop
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    :) Hi an Alle,

    Noyne hat recht, ich habe das End an der genannten Stelle (Zeile 31) geistig einfach mit If ergänzt, der PC leider nicht..

    Zum Mitlachen:

    Meine Frau hat mich auf den Trichter gebracht, obwohhl sie kein VB 6 versteht.. Vier-Augen Prinzip hat doch was für sich..

    Herzlichen Dank an alle Mit-Grübler

    speidergutt