Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
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

vermeiden von Endlosschleifen

vermeiden von Endlosschleifen
07.05.2013 10:58:52
Endlosschleifen
Hallo liebe Gemeinde,
ich bin absoluter Anfänger in VBA. Doch möchte ich mich in die Materie langsam einarbeiten.
Nun habe ich ein kleines einfaches Programm geschrieben, wo aus Tabelle2 Daten aus den Zellen a1:a9 in Tabelle1 a4:a13 kopiert werden sollen.
Diese Prozedur soll ausgelöst werden, wenn in Tabelle1!A1 eine 1 steht.
Das funktioniert soweit schon gut. Jedoch "flackert" der Bildschirm, weil vermutlich diese Prozedur endlos bis zum automatischen Abbruch durchgeführt wird.
Wie kann ich dieses durchlaufen der Schleifen vermeiden?
Vielen Dank schon einmal für evtl. Hilfe.
https://www.herber.de/bbs/user/85224.xls
Grüße
Peter

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vermeiden von Endlosschleifen
07.05.2013 11:05:09
Endlosschleifen
Hallo Peter
Dies ist eine Variante des Übertrags
Sub kopieren2()
Worksheets("Tabelle1").Range("A4:A12").Value = Worksheets("Tabelle2").Range("A1:A9").Value
End Sub
Grüße

Auf .Select verzichten, ...
07.05.2013 11:08:44
EtoPHG
Peter,
ist eine der wichtigsten Grundsätze, wenn du mit VBA zu programmieren anfängst.
Liest dazu: Achtung Makrorekorder oder Wer selektiert denn da?
Dein Code könnte nach dem Verständnis obigen Artikels so lauten:
Sub kopieren()
With ActiveWorkbook
.Worksheets("Tabelle2").Range("a1:a9").Copy .Worksheets("Tabelle1").Range("A4")
End With
End Sub
Dazu ist aber noch anzumerken: Versuch mit der VBA-Hilfe Objekte wie ActiveWorkbook, ThisWorkbook oder Workbooks("Name") zu verstehen.
Gruess Hansueli

Anzeige
Ooops, da ist ja noch ein _Change Ereignis
07.05.2013 11:18:18
EtoPHG
Hallo Peter,
Dein _Change Ereignis im Blatt habe ich übersehen.
Das ist der Bösewicht für das Endlos-Verhalten, denn mit dem Kopieren, löst du es immer wieder aus.
Bei diesem Ereignis ist es wichtig, dass die Ereignissteuerung vorüvergehend ausgeschaltet werden muss, solange Code Werte im gleichen Blatt verändert!
Also:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then             ' Prüfen ob A1 verändert wurde
If Target = 1 Then                      ' Nur bei Wert = 1 durchführen
Application.EnableEvents = False    ' Ereignissteuerung aus
Call kopieren                       ' Makro verändert Wert in diesem Blatt
Application.EnableEvents = True     ' Ereignissteuerung wieder einschalten
End If
End If
End Sub
Gruess Hansueli

Anzeige
EnableEvents ohne Fehlerbehandlung ....
07.05.2013 11:23:12
Klaus
Hallo,
das abschalten von EnableEvents kann zu unerwünschtem Verhalten von Excel führen! Daher sollte in jedem Makro eine minimum-Fehlerbehandlung eingebaut werden die Enableevents wieder einschaltet:
Sub DeinMakro()
on error goto hell
[dein Code]
goto heaven:
hell:
MsgBox "Fehler!" & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description
heaven:
Application.EnableEvents = True
End Sub
Lesenswertes zum Thema:
http://www.online-excel.de/excel/singsel_vba.php?f=144
Grüße,
Klaus M.vdT.

Anzeige
AW: EnableEvents ohne Fehlerbehandlung ....
07.05.2013 11:39:13
EtoPHG
Hallo Klaus,
Das ist mir klar, bitte teile das direkt dem Anfrager mit!
Zudem ist im besagten Artikel ff. keine besonderer Hinweis auf die Ereignissteuerung.
Dann würde besser Abfrage / Warnung ausschalten (letzter Abschnitt) passen.
Wenn du deinen Code-Vorschlag nun in das Makro des Anfragers einbaust, schaltet es die Ereignissteuerung ungeachtet des vorherigen Zustands ein. Das könnte bei der aufrufenden Prozedur aber zu wiederum unerwünschten Effekten führen, wenn dort noch weitere Veränderungen am Blatt vorgenommen! Also müsstest du vorher den Zustand der Ereignissteuerung sichern und auf diesen Zurücksetzen!
Gruess Hansueli

Anzeige
AW: EnableEvents ohne Fehlerbehandlung ....
07.05.2013 11:45:34
Klaus
Hallo Hansueli,
ja du hast recht -- ich hatte "displayalerts" im Kopf. Ich mein ja auch nur, dass bei so kritischen Sachen zumindest ein Hinweis folgen sollte. Dass ich DIR das nicht erklären muss ist mir klar - dich würd ich eher um Rat fragen als dir irgendwas zu erklären! Ich hoffe aber, dass der TE diesen Beitrag liest, da er ja in "seinem" Topic steht.
Grüße,
Klaus M.vdT.

AW: EnableEvents ohne Fehlerbehandlung ....
07.05.2013 11:56:56
Peter
Erst einmal vielen Dank für Eure guten Ideen. Es sieht tatsächlich schon eleganter aus. Auch wenn, es momentan noch böhmische Dörfer für mich sind ;-)
Mein code sieht nun folgendermaßen aus und es funktioniert wunderbar.
https://www.herber.de/bbs/user/85226.xls
Nun soll mein nächster Schritt sein, daß in Tabelle2 die Spalten A:F Daten enthalten können. Wird nun in Tabelle 1 in A1:F1 also in A1 oder B1 oder C1 ... eine 1 eingetragen, so sollen die Daten aus Tabelle2 der entsprechnden Spalte in die Tabelle1 unter evtl. bereits vorhandene Daten in Spalte A kopiert werden.
Ich benötige nur eine Idee oder Ansatzpunkt. Den Rest möchte ich mir selbst zusammen reimen :-)
Grüße
Peter

Anzeige
AW: EnableEvents ohne Fehlerbehandlung ....
07.05.2013 12:00:29
Peter
ups...das war ja noch die alte datei...
ich muß die andere noch einmal suchen...

AW: EnableEvents ohne Fehlerbehandlung ....
07.05.2013 12:08:28
EtoPHG
Hallo Peter,
Ansätze:
  • Im _Change Ereignis muss der Bereich A1:F1 auf Änderung geprüft werden.

  • Die Target.Column (Spalte in der die Änderung stattfand) sollte als Parameter der Kopier-Prozedur übergeben werden.

  • Die Kopier-Prozedur sollte so angepasst werden, dass sie mit der Syntax2 der Range-Eigenschaft arbeitet, siehe dazu die VBA-Hilfe: Range(Cells(row, column), Cells(row, column)). Dadurch kann der übergebene Parameter als Spalten-Index direkt angewendet werden.

  • Für das Bestimmen der nächsten freien Zell (Zitat: ..unter evtl. bereits vorhandene Daten...kopieren findest 1000nde von Forumsbeiträgen in der Forums-Recherche.

  • Gruess Hansueli
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige