Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1356to1360
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie kann ich die Schleife verhindern?

Wie kann ich die Schleife verhindern?
06.05.2014 10:51:53
VBA
Hallo zusammen,
ich habe ein Problem, und zwar läuft mein Makro eine Schleife ab, die mir viieeel zu lange dauert. Kann ich das i-wie unterdrücken oder verkürzen?
Meine Datei:
Ich habe 3 Tabellen, wenn ich in einer von dreien in Spalte 9, 10 oder 11 etwas ändere, soll es in den anderen Tabellen auch geändert werden.
Folgender Auszug aus dem Makro für Tabelle 1 (Für Tabelle 2 und 3 sind nur die Worksheets anders benannt, der Rest ist gleich):
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n As Long, ws2 As Worksheet, ws3 As Worksheet
Set ws2 = Worksheets("Tabelle 2")
Set ws3 = Worksheets("Tabelle 3")
If Target.Column = 9 Then               ' Spalte 9
Select Case Cells(Target.Row, 9)
Case Is = "Gezeichnet"
ws2.Cells(Target.Row, 9) = Target
ws3.Cells(Target.Row, 9) = Target
Case Is = "Versendet"
ws2.Cells(Target.Row, 9) = Target
ws3.Cells(Target.Row, 9) = Target
Case Is = "Genehmigt"
ws2.Cells(Target.Row, 9) = Target
ws3.Cells(Target.Row, 9) = Target
Case Else
ws2.Cells(Target.Row, 9) = ""
ws3.Cells(Target.Row, 9) = ""
End Select
End If
If Target.Column = 10 Then               ' Spalte 10
Select Case Cells(Target.Row, 10)
Case Is = "Angefordert"
ws2.Cells(Target.Row, 10) = Target
ws3.Cells(Target.Row, 10) = Target
Case Is = "Versendet"
ws2.Cells(Target.Row, 10) = Target
ws3.Cells(Target.Row, 10) = Target
Case Is = "Eingegangen"
ws2.Cells(Target.Row, 10) = Target
ws3.Cells(Target.Row, 10) = Target
Case Else
ws2.Cells(Target.Row, 10) = ""
ws3.Cells(Target.Row, 10) = ""
End Select
End If
If Target.Column = 11 Then               ' Spalte 11
Select Case Cells(Target.Row, 11)
Case Is = "Erstellt"
ws2.Cells(Target.Row, 11) = Target
ws3.Cells(Target.Row, 11) = Target
Case Is = "An EVU versendet"
ws2.Cells(Target.Row, 11) = Target
ws3.Cells(Target.Row, 11) = Target
Case Is = "An Kunden versendet"
ws2.Cells(Target.Row, 11) = Target
ws3.Cells(Target.Row, 11) = Target
Case Is = "An Kunden und EVU versendet"
ws2.Cells(Target.Row, 11) = Target
ws3.Cells(Target.Row, 11) = Target
Case Else
ws2.Cells(Target.Row, 11) = ""
ws3.Cells(Target.Row, 11) = ""
End Select
End If
End Sub

Wenn ich nun etwas ändere, bleibt Excel Minuten lang stehen bis er es überall übernommen hat. Ich denke das dort eine Schleife läuft, die gefühlt unendlich lang ist. Kann mir wer helfen? =(
Grüße

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie kann ich die Schleife verhindern?
06.05.2014 10:56:47
Hajo_Zi
du solltest die Reaktion auf Eingabe abschalten.
Gruß Hajo

@Hajo's Vorschlag ist wieder mal eine...
06.05.2014 11:02:21
EtoPHG
echte Sensation:
Vorschlag an Hajo: Schalte deine Eingaben als Reaktion auf Fragen ab!
Gruess Hansueli

AW: @Hajo's Vorschlag ist wieder mal eine...
06.05.2014 11:10:20
VBA
Hallo,
so etwas hab ich mir schon gedacht, wusste nur keine Lösung, weil ich nicht soooo tiefe Kenntnisse in VBA habe. Aber es funktioniert nun einwandfrei. Ich danke euch vielmals. :)
Grüße

AW: Wie kann ich die Schleife verhindern?
06.05.2014 10:59:57
EtoPHG
Hallo,
Dein Code führt zu einer Rückkopplung, wenn er in jedem Tabellenblatt steht, denn eine Veränderung eines Zellinhalts löst wieder das _Change Ereignis aus.
Setze in allen Codes an den Anfang:

Application.EnableEvents = False
If Target.Column...
und an den Schluss:

Application.EnableEvents = True
End Sub

Gruess Hansueli

Anzeige
AW: mit Application.EnableEvents = False
06.05.2014 11:05:41
Daniel
Hi
das Problem ist, dass die Änderung auf Tabelle2 das dortige Change-Event auslöst und du dich so in einer Endlosschleife verfängst.
man kann die Automatische Auslösung der Eventmakros wie Change verhindern, in dem man den Befehl:
Application.EnableEvents = False

in den Code einbaut, danach werden die Eventmakros nicht mehr ausgeführt.
Diese Einstellung bleibt nach Makroende erhalten, daher muss man am Schluss des Makros die Events wieder mit
Application.EnableEvents = True

aktivieren.
Sollte das mal unterbleiben (Vergessen, Fehlerabbruch, beim Testen im Einzelstep), dann kann man Application.EnableEvents = True im Direktfenster eingeben, um die Events wieder zu aktivieren.
gruß Daniel

Anzeige
AW: mit Application.EnableEvents = False
06.05.2014 11:11:48
VBA
Hallo,
so etwas hab ich mir schon gedacht, wusste nur keine Lösung, weil ich nicht soooo tiefe Kenntnisse in VBA habe. Aber es funktioniert nun einwandfrei. Ich danke euch vielmals. :)
Grüße

AW: Wie kann ich die Schleife verhindern?
06.05.2014 11:23:29
Rudi
Hallo,
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws2 As Worksheet, ws3 As Worksheet
Dim lRow As Long, lCol As Long
Dim bolReplace As Boolean
Set ws2 = Worksheets("Tabelle 2")
Set ws3 = Worksheets("Tabelle 3")
lRow = Target.Row
lCol = Target.Column
On Error GoTo errEXIT
Application.EnableEvents = False
Select Case lCol
Case 9 To 11
Select Case lCol
Case 9
Select Case Target
Case "Gezeichnet", "Versendet", "Genehmigt"
bolReplace = True
End Select
Case 10
Select Case Target
Case "Angefordert", "Versendet", "Eingegangen"
bolReplace = True
End Select
Case 11
Select Case Target
Case "Erstellt", "An EVU versendet", _
"An Kunden versendet", "An Kunden und EVU versendet"
bolReplace = True
End Select
End Select
If bolReplace Then
ws2.Cells(lRow, lCol) = Target
ws3.Cells(lRow, lCol) = Target
Else
ws2.Cells(lRow, lCol) = ""
ws3.Cells(lRow, lCol) = ""
End If
End Select
errEXIT:
Application.EnableEvents = True
End Sub

Gruß
Rudi
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige