Avatar billede tarasque Nybegynder
08. oktober 2008 - 11:38 Der er 11 kommentarer og
1 løsning

alternativ til goto

Er det muligt at springe ud af en loop til den samme sub (ligesom en goto) men når proces pointeren når til sin afslutning, skal den fortsætte tilbage til hvor den kom fra (loop'en)

altså

sub test()
do while i < 100
  goto something
  i=i+1
loop

something:
MsgBox "i er blevet større"

end sub

dette vil aldrig tælle "i" op, for goto dræber min løkke, jeg ønsker at fortsætte løkken, men at kunne køre min sub til end sub.

håber spørgsmålet giver mening.
Avatar billede sorenstrom Nybegynder
08. oktober 2008 - 12:04 #1
Prøv det her. Det skulle virke

Public i As Integer
Private Sub Command1_Click()
Do While i < 100
  GoHere
  i = i + 1
Loop

End Sub

Private Sub GoHere()
  MsgBox "'i' er nu lig med " & i
End Sub

/Søren
Avatar billede tarasque Nybegynder
08. oktober 2008 - 12:28 #2
Det er nødvendigt jeg springer i den samme sub, og kører denne til ende.
Avatar billede kabbak Professor
08. oktober 2008 - 15:56 #3
Sub test()
    Do While I < 100
        GoSub something
        I = I + 1
    Loop
    Exit Sub
something:
    MsgBox "i er blevet større" & I
    Return
End Sub
Avatar billede kjulius Novice
08. oktober 2008 - 20:21 #4
Spørgsmålet er hvorfor du vil lave det inden for din sub. Det mest logiske ville være at lave et kald til en enden sub, med de relevante variable overført som parametre (selv om man selvfølgelig også kan declarere variablerne som public på modulniveau, sådan som sorenstrom viser). Det mest logiske (efter min mening :-) ville være at kode det som:

Private Sub test()
  Dim I As Integer
  Do While I < 100
      I = I + 1
      Something(I)
  Loop
End Sub
Private Sub Something(Parmværdi As Integer)
  MsgBox "I er blevet større: " & Parmværdi
End Sub
Avatar billede tarasque Nybegynder
09. oktober 2008 - 08:16 #5
Eksemplet var bare et tænkt eksempel, og ikke selve problemet, det er nødvendigt at jeg kører min sub færdig da det er en initialiserings sub (det er VBA) og jeg ønsker at lave en cyclic task (med doevents) inden initialiseringen er færdig, men initialiseringen skal også have lov til at blive færdig.

beklager at min problembeskrivelse var noget vag. håber det giver mere mening nu.
Avatar billede kabbak Professor
09. oktober 2008 - 15:46 #6
Du spørger:
"Er det muligt at springe ud af en loop til den samme sub (ligesom en goto) men når proces pointeren når til sin afslutning, skal den fortsætte tilbage til hvor den kom fra (loop'en)"


Hvad var der i vejen med mit eksempel, det gør det du spørger om.

Men jeg ville også lave det som kjulius skriver, hvis jeg skulle bestemme.
Avatar billede kjulius Novice
09. oktober 2008 - 20:21 #7
Hvis du i din initieringskode indsætter en DoEvents, vil det midlertidigt tillade andre rutiner at eksekvere, f.eks. hvis du har en Timer event på en form (SplashScreen) du tidligere har loaded, som skal ændre lidt på hvad din SplashScreen viser (Rotere et billede, f.eks., for at indikere, at der altså sker noget i baggrunden). Når koden på formens Timer event så er færdig, vil kontrollen igen blive givet fri, hvilket vil betyde at din kode vil fortsætte fra din DoEvents igen.
Avatar billede kjulius Novice
09. oktober 2008 - 20:31 #8
Det er mig bekendt kun kode på en Event på en form (og vel også på en kørende rapport), som vil blive udført, når du angiver DoEvents. Du kan altså ikke "kalde" to forskellige rutiner, og køre dem parallelt. Du kan højst simulere det, ved at åbne en form og med mellemrum fyre en timer event af.
Avatar billede tarasque Nybegynder
10. oktober 2008 - 11:50 #9
Kabbak: Efter end sub kører den noget low-level kode jeg har brug for den kører, problemet med dit eksempel er at du selv definerer hvornår den skal returnere - det er ikke brugbart. Den skal returnere efter den når slutningen af sub'en (end sub).

Har lavet det med en timer, selvom det ikke er optimalt.
Avatar billede tarasque Nybegynder
10. oktober 2008 - 11:51 #10
lukker, men hvis en kommer med svaret giver jeg gerne point for at være blevet klogere.
Avatar billede kjulius Novice
10. oktober 2008 - 18:31 #11
Tja, jeg må give kabbak ret, ud fra den opgavebeskrivelse du gav, blev opgaven løst (i indtil flere versioner). ;-)

Selv efter dine uddybende forklaringer, er det svært at gennemskue, hvad du egentlig var på jagt efter. Ja, jeg vil nærmest påstå, at din forklaring til kabbak 10/10-2008 11:50:15 mere ligner vildledning end vejledning. Jeg fatter i hvert fald intet.
Avatar billede tarasque Nybegynder
13. oktober 2008 - 10:49 #12
Der står altså i opgavebeskrivelsen at den skal køre til end sub. I den samme sub som goto kommer i.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester