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

Worksheet_Change Ereignis erweitern

Worksheet_Change Ereignis erweitern
22.03.2007 17:27:00
Fritz_W
Hallo VBA-Experten,
in einem Tabellenmodul befindet sich nachstehender Code der das Makro1 startet, wenn sich in der Spalte A ein Wert ändert.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target(1, 1).Column = 1 And Target(1, 1).Row > 1 Then Makro1
In der gleichen Tabelle möchte ich nun per Ereignismakro erreichen, dass wenn sich der Wert einer Zelle in der Spalte Q auf 3 ändert, der Bereich J:L der gleichen Zeile kopiert und über "InhalteEinfügen- Werte" in den Bereich A:C dieser Zeile eingefügt wird.
Beispiel:
Ändert sich der Zellwert in Zelle Q6 auf 3, dann soll J6:L6 kopiert werden und als Wert in den Bereich A6:C6 eingefügt werden.
Ändert sich der Zellwert Q9 auf 3, sollte folglich J9:L9 kopiert und als Wert in A9:C9 kopiert werden.
Da weiterhin bei jeder Zelländerung in der Spalte A das Makro1 ausgeführt werden soll, müsste man meines Wissens wohl beides im Worksheet_Change Ereignismakro "kombinieren".
Mit der Umsetzung bin ich aber hoffnungslos überfordert, so dass ich euch um Unterstützung bitte.
Vielen Dank im Voraus.
Mfg
Fritz

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change Ereignis erweitern
22.03.2007 17:58:00
IngGi
Hallo Fritz,
mein Vorschlag:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target(1, 1).Column = 1 And Target(1, 1).Row > 1 Then Makro1
'nur eine Zelle geändert
If Target.Cells.Count = 1 Then
'geänderte Zelle in Spalte 17 (Q)
If Target.Column = 17 Then
'Zelle auf Wert 3 geändert
If Target = 3 Then
'Bereich kopieren
Cells(Target.Row, 10).Resize(1, 3).Copy
'Werte einfügen
Cells(Target.Row, 1).Resize(1, 3).PasteSpecial Paste:=xlPasteValues
End If
End If
End If
End Sub
Gruß Ingolf
AW: Worksheet_Change Ereignis erweitern
22.03.2007 18:17:43
Fritz_W
Hallo Ingolf,
ich habe dein Makro getestet, leider funktioniert das nicht.
Ich habe aber (vermutlich) herausgefunden, woran es liegt. Die Zellwerte in der Spalte Q ändern sich aufgrund einer Formel, die jeweils in den Zellen der Spalte Q stehen. Denn wenn ich in eine Zelle der Spalte Q die Zahl 3 direkt ein, funktioniert das Makro wie gewünscht.
Könnte man das noch ändern, damit es auch bei formelbeginten Änderungen (auf 3) der Zellwerte der Spalte Q funktioniert.
An dieser Stelle aber noch einmal vielen Dank für Deine Unterstützung
Gruß
Fritz
Anzeige
AW: Worksheet_Change Ereignis erweitern
22.03.2007 18:45:21
IngGi
Hallo Fritz,
das macht die Sache leider deutlich komplizierter. Man müsste auf das Worksheet_Calculate-Ereignis ausweichen. Dort gibt's aber kein "Target", d.h. ich weiß nicht, welche Zellen sich geändert haben. Daher müsste man das Ganze z.B. so aufbauen, dass das Makro alle Zellen in Spalte Q abklappert und nachschaut, wo überall eine 3 drin ist. Dann schaut das Makro, ob in diesen Zeilen die Zellen der Spalten J-L mit den Zellen der Spalten A-C identisch sind, was bedeuten würde, dass diese Änderung auf 3 in Spalte Q bereits bearbeitet ist. In diesem Fall würde nichts weiter geschehen, ansonsten würden die Spalten J-L nach A-C kopiert werden.
Anmerkung: Man kann ja leider nicht einfach alle Zeilen mit 3 in Spalte Q bearbeiten, denn jedesmal wird dann durch das Kopieren nach Spalte A über das Worksheet_Change-Ereignis das Makro1 ausgeführt. Da ich nicht weiß, was in diesem Makro passiert, gehe ich sicherheitshalber mal davon aus, dass dieses Makro nicht ausgeführt werden darf, wenn der Wert in Q schon vorher auf 3 stand.
Daher Frage: Werden die Werte in den Spalten A-C nach dem Kopieren aufgrund von Spalte Q=3 nochmal verändert? Dann würde der oben beschriebene Weg nicht gehen, da er dann ja Zeilen, in denen schon vor dem Calculate-Ereignis eine 3 stand, nicht aufgrund des gleichen Inhalts in A-C bzw. J-L erkennen könnte.
Gruß Ingolf
Anzeige
AW: Worksheet_Change Ereignis erweitern
22.03.2007 19:09:00
Fritz_W
Hallo Ingolf,
zunächst noch einmal vielen Dank für Deine außerordentliche Mühe, mit der Du mir Hilfe anbietest.
Deine Ausführungen sind für einen "VBA-Laien" für mich sehr interessant und ich denke auch, dass ich das alles richtig verstanden habe. Also ein Wert in Spalte A ändert sich (in der gleichen Zelle) nicht noch einmal.
Da sich die Werte im Bereich J:L auch ändern können, würde das Makro1 immer dann erneut ausgeführt werden, wenn sich diese Werte ändern. Ansonsten allerdings nicht.
Aber in der gleichen Zeile wird der Zellwert in der Spalte Q nur einmal den Wert 3 annehmen.
Ich hoffe, dass diese Informationen für dich ausreichend sind, ansonsten bitte noch mal melden!
Und noch einmal: Vielen Dank!
Gruß
Fritz
Anzeige
AW: Worksheet_Change Ereignis erweitern
22.03.2007 21:25:00
IngGi
Hallo Fritz,
nach deiner Beschreibung können wir das so machen, wie angedacht. Damit haben wir also zwei Ereignismakros. Eines für das Worksheet_Change-Ereignis und eines für das Worksheet_Calculate-Ereignis.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target(1, 1).Column = 1 And Target(1, 1).Row > 1 Then Makro1
End Sub


Private Sub Worksheet_Calculate()
'Variable repräsentiert immer die aktuell bearbeitete Zelle
'im Bereich Q1:Q? (unterste belegte Zelle)
Dim rng As Range
'alle Zellen im Bereich Q1:Q? (unterste belegte Zelle) abklappern
For Each rng In Range(Cells(1, 17), Cells(Rows.Count, 17).End(xlUp))
'wenn Wert der Zelle = 3
If rng = 3 Then
'wenn eine der Zellen der Spalten A,B,C ungleich der
'entsprechenden Zelle in den Spalten J,K,L ist
If Cells(rng.Row, 1)  Cells(rng.Row, 10) Or _
Cells(rng.Row, 2)  Cells(rng.Row, 11) Or _
Cells(rng.Row, 3)  Cells(rng.Row, 12) Then
'Bereich kopieren
Cells(rng.Row, 10).Resize(1, 3).Copy
'Werte einfügen
Cells(rng.Row, 1).Resize(1, 3).PasteSpecial Paste:=xlPasteValues
End If
End If
'nächste Zelle in Q1:Q? (letzte belegte Zelle) bearbeiten
Next 'rng
End Sub
Gruß Ingolf
Anzeige
Super! Vielen Dank Ingolf! o.w.T.
22.03.2007 21:34:12
Fritz_W

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige