Endlosschleife ?

Von: , Frage gestellt am Do, 13. Aug 2009

Moin zusaammen,

ich habe mir gerade eine Endlosschleife gelegt :-(
Wenn Zelle c23 aktiviert wird, soll die Schleife durchlaufen werden.
Danach soll wieder c23 die aktive Zelle sein, ohne jedoch die
Schleife nochmal zu durchlaufen.

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Address
Case "$C$23"
Range("$c$34").Select
ActiveCell.FormulaR1C1 = "=RC[+3]"
Range("$D$34").Select
ActiveCell.FormulaR1C1 = "=RC[+3]"
If Intersect(Target, Range("C23:C23")) Is Nothing Then Exit Sub
Range("$c$23").Select
End Select
End Sub


Hat vielleicht jemand eine Idee?

Gruß und danke
Rolf

9 Antworten zu dieser Frage

  1. Antwort von nach 7 Stunden 0 hilfreich
    Re: Danke

    Hallo zusammen,

    ich danke euch beiden und allen, die sich nen Kopf gemacht haben.
    Ich kann's im Moment nicht zu ende bringen - keine Zeit...

    Habe eure Lösungen gut verstaut und melde mich die Tage wieder.

    Gruß und danke für eure Mühe.

    Rolf

  2. Antwort von nach 47 Minuten 0 hilfreich
    Re: Endlosschleife ?

    Grüezi Rolf ich habe mir gerade eine Endlosschleife gelegt :-(
    Wenn Zelle c23 aktiviert wird, soll die Schleife durchlaufen
    werden.
    Danach soll wieder c23 die aktive Zelle sein, ohne jedoch die
    Schleife nochmal zu durchlaufen.

    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Address
    Case "$C$23"
    Range("$c$34").Select
    ActiveCell.FormulaR1C1 = "=RC[+3]"
    Range("$D$34").Select
    ActiveCell.FormulaR1C1 = "=RC[+3]"
    If Intersect(Target, Range("C23:C23")) Is Nothing
    Then Exit Sub
    Range("$c$23").Select
    End Select
    End Sub


    Hat vielleicht jemand eine Idee?
    Ja, das ist ein Klassiker - bedingt durch die Selektion der Zellen in die Du schreibst. Lass die .Select und .Activate alle weg (in >99% sind sie eh unnätig), dann klappt das Ganze schon mal korrekt.
    Und da Du dann die markierte Zelle gar nicht verlässt, ist es auch nicht notwendig, sie am Ende wieder zu selektieren.

    Dein Code sieht dann gleich viel schlanker aus:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Address
    Case "$C$23"
    Range("C34").FormulaR1C1 = "=RC[+3]"
    Range("D34").FormulaR1C1 = "=RC[+3]"
    End Select
    End Sub


    Wenn Du dann dennoch die weiteren Events unterbinden willst lässt sich auch dies bewerkstelligen:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Address
    Case "$C$23"
    Application.EnableEvents = False
    Range("C34").FormulaR1C1 = "=RC[+3]"
    Range("D34").FormulaR1C1 = "=RC[+3]"
    Application.EnableEvents = True
    End Select
    End Sub


    --
    Mit freundlichen Grüssen

    Thomas Ramel
    - MVP für MS-Excel -

    • Antwort von nach 4 Tagen 0 hilfreich
      Re^2: Endlosschleife ?

      Hallo Thomas, ich habe mir gerade eine Endlosschleife gelegt :-(
      Wenn Zelle c23 aktiviert wird, soll die Schleife durchlaufen
      werden.
      Danach soll wieder c23 die aktive Zelle sein, ohne jedoch die
      Schleife nochmal zu durchlaufen.

      Option Explicit
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Select Case Target.Address
      Case "$C$23"
      Range("$c$34").Select
      ActiveCell.FormulaR1C1 = "=RC[+3]"
      Range("$D$34").Select
      ActiveCell.FormulaR1C1 = "=RC[+3]"
      If Intersect(Target, Range("C23:C23")) Is Nothing
      Then Exit Sub
      Range("$c$23").Select
      End Select
      End Sub


      Hat vielleicht jemand eine Idee?
      Ja, das ist ein Klassiker - bedingt durch die Selektion der
      Zellen in die Du schreibst. Lass die .Select und .Activate
      alle weg (in >99% sind sie eh unnätig), dann klappt das Ganze
      schon mal korrekt.
      Und da Du dann die markierte Zelle gar nicht verlässt, ist es
      auch nicht notwendig, sie am Ende wieder zu selektieren.

      Dein Code sieht dann gleich viel schlanker aus:

      So hab ich das nicht hinbekommen. Entweder es passiert nix, wenn ich
      auf c23 gehe, oder, wenn ich versuche, was zu ändern, hänge ich wieder in der Schleife.

      Hier mal der ganze Code:

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Cancel = True
      'Sheets("Eingabe").ScrollArea = "A$2:$L$36"
      Select Case Target.Address
      Case "$C$4"
      If Intersect(Target, Range("C4:C4")) Is Nothing Then Exit Sub
      Range("$C$4") = 0
      Range("$C$5") = 0
      Range("$C$6") = 0
      Range("$C$7") = 0
      Range("$C$8") = 0
      Range("$c$14") = 1.4
      Range("$c$22") = 0
      Range("$C$23") = 0
      Range("$C$26") = 0
      Range("$G$22") = 0
      Range("$C$32") = 0
      Range("$C$33") = 0
      Range("$C$34") = 0
      Range("$C$35") = 0
      Case "$C$22"
      If Intersect(Target, Range("C22:C22")) Is Nothing Then Exit Sub
      Range("$C$22") = 0
      Range("$C$23") = 0
      Range("$C$26") = 0
      Range("$C$32") = 0
      Range("$C$33") = 0
      Range("$C$34") = 0
      Range("$C$35") = 0
      Case "$G$22"
      Range("$G$22") = 0
      Case "$C$14"
      Range("$C$14") = 1.4
      Case "$C$23"
      Range("$C$23") = 0
      Range("$C$26") = 0
      Range("$C$32") = 0
      Range("$C$33") = 0
      Range("$C$34") = 0
      Range("$C$35") = 0
      Range("$c$34").Select
      ActiveCell.FormulaR1C1 = "=RC[+3]"
      Range("$D$34").Select
      ActiveCell.FormulaR1C1 = "=RC[+3]"
      If Intersect(Target, Range("C23:C23")) Is Nothing Then Exit Sub
      Range("$c$23").Select
      Case "$C$26"
      Range("$C$26") = 0
      Range("$C$32") = 0
      Range("$C$33") = 0
      Range("$C$34") = 0
      Range("$C$35") = 0
      Range("$d$34") = 0
      Case "$C$33"
      Range("$C$23") = 0
      End Select
      End Sub
      


      wo liegt mein Fehler?

      Gruß
      Rolf

      • Antwort von nach 5 Tagen 0 hilfreich
        Re^3: Endlosschleife ?

        Grüezi Rolf Ja, das ist ein Klassiker - bedingt durch die Selektion der
        Zellen in die Du schreibst. Lass die .Select und .Activate
        alle weg (in >99% sind sie eh unnätig), dann klappt das Ganze
        schon mal korrekt.
        Und da Du dann die markierte Zelle gar nicht verlässt, ist es
        auch nicht notwendig, sie am Ende wieder zu selektieren.

        Dein Code sieht dann gleich viel schlanker aus:

        So hab ich das nicht hinbekommen. Entweder es passiert nix,
        wenn ich
        auf c23 gehe, oder, wenn ich versuche, was zu ändern, hänge
        ich wieder in der Schleife.

        wo liegt mein Fehler?
        Ja, Du selektierst ja schon wieder - meine Zeilen kommen auch ohne Ausschalten der Events zugange, weil gar nirgends wieder was selektiert wird. In deinem Code scheinen mir auch ein paar Zeilen nicht notwendig zu sein.


        Aber inzwischen hast Du es ja irgendwie hingebogen, wenn ich das richtig mitbekommen habe?


        Mit freundlichen Grüssen

        Thomas Ramel
        - MVP für MS-Excel -

  3. Antwort von nach 48 Minuten 0 hilfreich
    Re: Endlosschleife ?

    Guten Tag.

    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim HatIhnSchon As Boolean
    Select Case Target.Address 
            If (Not HatIhnSchon) Then
    Case "$C$23"
                   HatIhnSchon = True
    Range("$c$34").Select
    ActiveCell.FormulaR1C1 = "=RC[+3]"
    Range("$D$34").Select
    ActiveCell.FormulaR1C1 = "=RC[+3]"
    If Intersect(Target, Range("C23:C23")) Is Nothing
    Then Exit Sub
    Range("$c$23").Select
            End If
    End Select
    End Sub
    


    So in etwa müsste das gehen.

    Gruß Eillicht zu Vensre

    • Antwort von nach 4 Tagen 0 hilfreich
      Re^2: Endlosschleife ?


      Hallo,
      nun komme ich endlich dazu, zu antworten.
      Ich habe das mal so eingebaut:

      Option Explicit
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Dim HatIhnSchon As Boolean
      Select Case Target.Address
      Case "$C$23"
      If (Not HatIhnSchon) Then
      HatIhnSchon = True
      Range("$c$34").Select
      ActiveCell.FormulaR1C1 = "=RC[+3]"
      Range("$D$34").Select
      ActiveCell.FormulaR1C1 = "=RC[+3]"
      If Intersect(Target, Range("C23:C23")) Is Nothing Then Exit Sub
      Range("$c$23").Select
      End If
      End Select
      End sub
      


      Dabei bleibt er aber auch wieder in dieser Schleife hängen,
      d.h. er hoppelt endlos von C34 nach D34.

      Select Case Target.Address 
      If (Not HatIhnSchon) Then
      Case "$C$23"
      


      So herum mochte er das nicht, das gab eine Fehlermeldung:
      Anweisungen und Zeilenmarken zwischen select case und erstem
      Vorkommen von case unzulässig.

      Oder hab ich jetzt was falsch gemacht?

      Gruß
      Rolf

      • Antwort von nach 4 Tagen 0 hilfreich
        Re^3: Endlosschleife ?

        Hallo Rolf, Dabei bleibt er aber auch wieder in dieser Schleife hängen,
        d.h. er hoppelt endlos von C34 nach D34.
        ich hab jetzt den Code nur überflogen und gar nicht so geschaut was er genau macht.
        Aber im Code wird "Select" benutzt, d.h. da der Code auf SelectionChange reagiert ruft er sich laufend selbst neu auf.

        Baue mal zu Anfang dees Codes
        application.enalbleevents=false
        und am Ende
        application.enalbleevents=true
        ein. Vielleicht wars das schon. Wenn nicht muß man mal schauen. Anweisungen und Zeilenmarken zwischen select case und erstem
        Vorkommen von case unzulässig.
        Darin ist doch alles gesagt.

        Gruß
        Reinhard





        Select Case Target.Address
        If (Not HatIhnSchon) Then
        Case "$C$23"
        



        Oder hab ich jetzt was falsch gemacht?

        Gruß
        Rolf

        • Antwort von nach 4 Tagen 0 hilfreich
          Re^4: Endlosschleife ?

          Hallo Reinhard,
          Baue mal zu Anfang dees Codes
          application.enalbleevents=false
          und am Ende
          application.enalbleevents=true
          ein. Vielleicht wars das schon.
          Das wars tatsächlich, klappt wunderbar.
          Nachdem ich das erste "l" bei enalbleevents weggelassen habe,
          war auch die Fehlermeldung weg *g*

          Gruß und dank an alle
          Rolf

          • Antwort von nach 4 Tagen 0 hilfreich
            Re^5: Endlosschleife ?

            Nachdem ich das erste "l" bei enalbleevents weggelassen habe,
            war auch die Fehlermeldung weg *g*
            Hallo Rolf,

            das war ein Test, ich wollte wissen ob du schon weißt daß was marode ist wenn der Debugger kleingeschriebenen Code nicht umwandelt :-)

            Natürlich war es kein Schreibfehler. Ich war schon immer in Kramatig und Otografie sehr gut.
            Auch das Komatrinken äh die Komaregheln liebte ich.

            Gruß
            Reinhard, Rechtschreibprofi *kicher*

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!