Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
920to924
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
920to924
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ausführung einer Anweisung erzwingen

Ausführung einer Anweisung erzwingen
05.11.2007 00:04:16
janbert@gmx.ch
Hallo liebe Excel-Profis,
mit meinem Code möchte ich automatisch die entsprechenden Zellen in 2 Tabellenblättern ("Tabelle1" oder das Tabellenblatt mit dem passenden Ortsnamen) updaten. Soll heißen wenn ich in einem Tabellenblatt etwas in einer Zelle ändere, soll diese Änderung automatisch in dem anderen Tabellenblatt übernommen werden. Der Code sieht folgendermaßen aus:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim nummer As String
Dim datum As Date
Dim ort As String
nummer = Cells(Target.Row, 1).Value
datum = Cells(Target.Row, 2).Value
ort = Cells(Target.Row, 6).Value
If Sh.Name = "Tabelle1" Then
Sheets(ort).Select
Dim iRow
iRow = 2
Do Until IsEmpty(Cells(iRow, 1))
'1.Vergleich um gleiche PrNr's zu finden, 2.Vergleich: wenn Datum stimmt dann Wert  _
einfügen
If Cells(iRow, 1).Value = nummer And Cells(iRow, 2).Value = datum Then
Cells(iRow, 4).Value = Target
Exit Sub
End If
iRow = iRow + 1
Loop
Else
Sheets("Tabelle1").Select
iRow = 2
Do Until IsEmpty(Cells(iRow, 1))
'1.Vergleich um gleiche PrNr's zu finden, 2.Vergleich: wenn Datum stimmt dann Wert  _
einfügen
If Cells(iRow, 1).Value = nummer And Cells(iRow, 2).Value = datum Then
Cells(iRow, 4).Value = Target
Exit Sub
End If
iRow = iRow + 1
Loop
End If
End Sub


Das funktioniert auch so weit aber mein Problem ist, dass sobald ich "Cells(iRow, 4).Value = Target" ausführe das"Exit Sub" Statement nicht mehr ausgeführt wird, da logischer Weise die Sub "Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)" von vorne startet.
Jetzt meine Frage: kann ich die Ausfürung von "Exit Sub" erzwingen?, da nach dem Einfügen des Wertes in das gefundene Sheet die Arbeit ja schon erledigt ist.
Vielen Dank schon mal für Eure Mühe, bin für alle Tipps sehr dankbar, da ich wirklich auf dem Schlauch stehe und nicht weiter weiß.
Lieben Gruß
Jan

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ausführung einer Anweisung erzwingen
05.11.2007 00:32:22
Daniel
Hi
du musst zu beginn des Makros den Befehl:
Application.EnableEvents=False
einfügen.
Damit werden die EVENTS deaktviert, und du kannst die Werte in die Tabellenblätter schreiben, ohne dass sich das Makro selbst aufruft.
Allerdings musst du unbedingt vor Beenden des Makros die EVENT-Steuerung wieder mit
Application.EnabelEvents = True
aktivieren, sonst bleibt sie nach Beenden des Makros ausgeschaltet und du kannst die Zellen von Hand ändern, ohne dass das Makro startet.
Dh. vor jedem EXIT SUB in deinem Code musst du diesen Befehl einfügen. (besser wäre es, den Code so umzuprogrammieren, daß auf die Exit Subs verzichtet werden kann.)
Sollte das Makro mal mit einem Fehler abbrechen oder du hast irgendwo vergessen, die Events wieder einzuschalten, dann musst du den o.g. Befehl im Direktfenster eingeben, um die Events wieder zu aktivieren.
Gruß, Daniel

Anzeige
AW: Ausführung einer Anweisung erzwingen
05.11.2007 15:16:00
janbert@gmx.ch
Hallo Daniel,
Vielen Dank für Deine Antwort, bin leider gerade Arbeiten und kann es nicht ausprobieren aber hört sich sehr gut an :o) und bin mir sicher das es dann läuft.
Du schreibst:

besser wäre es, den Code so umzuprogrammieren, daß auf die Exit Subs verzichtet werden kann


warum denkst Du wäre es besser auf "Exit Sub" zu verzichten? Ich muss auch sagen von effektivem Programmieren habe ich keinen Plan, bin immer froh wenns läuft ;o).
Lieben Gruß
Jan

AW: Waruim kein Exit Sub im Code
05.11.2007 19:06:06
Daniel
Hi
gerade dein Beispiel zeigt warum:
der Code verursacht temporäre Änderungen im Excel, die bei Programmende wieder zurückgesetzt werden müssen.
Dh. vor jedem Exiit Sub muß der Programmteil ausgeführt werden, der dies erledigt, der gleiche Codeteil wiederholt sich x-Mal.
Das ist Fehleranfällig, weil man gerne mal was vergisst, macht den Code unnötig länger und ist hinderlich beim Fehlersuchen, korrigieren oder bei notwendigen Programmänderungen, weil man dann diesen Programmteil auch x-mal prüfen und überarbeiten muss.
Wenn die Bedingungen sauber strukturiert sind, ist das Exit Sub innerhalb des Codes nicht notwendig und ich muss den entsprechenden Programmteil nur einmal schreiben.
Ansonsten frag mal NoNet, der hat den Kampf für strukturiertes Programmieren auf seine Fahne geschrieben.
Gruß, Daniel

Anzeige
AW: Waruim kein Exit Sub im Code
10.11.2007 12:28:14
janbert@gmx.ch
Hi Daniel,
ja da hast Du recht. Viel mehr als den doppelt Code in eine Function zu schreiben fällt mir aber auch nicht ein. Auf jeden Fall wär dann die Lesbarkeit und besser und alles auch einfacher zu überprüfen. Die Exit Sub brauche ich dann aber immer noch deswegen denke ich nicht, dass du Du das mit "strukturiert" meinst. Wenn ich die Bedingungen genauer definiere, wird der Code dann durch die zusätzlichen Vergleiche und Bedingungen nicht langsamer als wenn man ein Exit Sub verwendet? Danke nochmal für Deine Hilfe und den Denkanstoß.
Lieben Gruß
Jan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige