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

2x Private Sub Worksheet_Change zusammen

2x Private Sub Worksheet_Change zusammen
22.11.2021 10:33:57
Stefan
Hallo,
ich habe in einer Tabelle ein Makro im Hintergrund laufen.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim EingabeBereich As Range
Set EingabeBereich = Intersect(Target, Columns(5))
If EingabeBereich Is Nothing Then Exit Sub
If WorksheetFunction.Count(EingabeBereich) = 0 Then Exit Sub
Application.EnableEvents = False
For Each Zelle In EingabeBereich
If VarType(Zelle.Value) = vbDouble Then
Zelle.Offset(0, 1).Value = Zelle.Offset(0, 1).Value + Zelle.Value
'Zelle.ClearContents
End If
Next
Application.EnableEvents = True
End Sub
Jetzt würde ich gerne davon ein zweites dazu packen, weiß aber nicht so recht wie ich das anstelle. Einfach so geht das ja nicht weil zwei "Private Sub Worksheet_Change" gehen ja nicht zusammen.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim EingabeBereich As Range
Set EingabeBereich = Intersect(Target, Columns(5))
If EingabeBereich Is Nothing Then Exit Sub
If WorksheetFunction.Count(EingabeBereich) = 0 Then Exit Sub
Application.EnableEvents = False
For Each Zelle In EingabeBereich
If VarType(Zelle.Value) = vbDouble Then
Zelle.Offset(0, 1).Value = Zelle.Offset(0, 1).Value + Zelle.Value
'Zelle.ClearContents
End If
Next
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim EingabeBereich As Range
Set EingabeBereich = Intersect(Target, Columns(9))
If EingabeBereich Is Nothing Then Exit Sub
If WorksheetFunction.Count(EingabeBereich) = 0 Then Exit Sub
Application.EnableEvents = False
For Each Zelle In EingabeBereich
If VarType(Zelle.Value) = vbDouble Then
Zelle.Offset(0, -2).Value = Zelle.Offset(0, -2).Value + Zelle.Value
'Zelle.ClearContents
End If
Next
Application.EnableEvents = True
End Sub
Kann mir da jemand helfen, wie ich die beiden zusammen bekomme?
Danke
Schöne Grüße
Stefan

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

Betreff
Datum
Anwender
Anzeige
AW: 2x Private Sub Worksheet_Change zusammen
22.11.2021 10:55:18
Rudi
auf die Schnelle:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim EingabeBereich As Range
Application.EnableEvents = False
Select Case Target.Column
Case 5
Set EingabeBereich = Intersect(Target, Columns(5))
If WorksheetFunction.Count(EingabeBereich) = 0 Then Exit Sub
For Each Zelle In EingabeBereich
If VarType(Zelle.Value) = vbDouble Then
Zelle.Offset(0, 1).Value = Zelle.Offset(0, 1).Value + Zelle.Value
End If
Next
Case 9
Set EingabeBereich = Intersect(Target, Columns(9))
If WorksheetFunction.Count(EingabeBereich) = 0 Then Exit Sub
For Each Zelle In EingabeBereich
If VarType(Zelle.Value) = vbDouble Then
Zelle.Offset(0, -2).Value = Zelle.Offset(0, -2).Value + Zelle.Value
End If
Next
End Select
Application.EnableEvents = True
End Sub
Gruß
Rudi
Anzeige
AW: 2x Private Sub Worksheet_Change zusammen
22.11.2021 11:09:27
Stefan
Vielen Dank Rudi, sowohl deine Variante als die vom UweD funktionieren wunderbar:
L Stefan
ein bisschen kompakter
22.11.2021 11:16:52
Rudi

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim EingabeBereich As Range
Dim iOffset As Integer
Select Case Target.Column
Case 5
Set EingabeBereich = Intersect(Target, Columns(5))
iOffset = 1
Case 9
Set EingabeBereich = Intersect(Target, Columns(9))
iOffset = -2
End Select
If WorksheetFunction.Count(EingabeBereich)  0 Then
Application.EnableEvents = False
For Each Zelle In EingabeBereich
If VarType(Zelle.Value) = vbDouble Then
Zelle.Offset(0, iOffset) = Zelle.Offset(0, iOffset) + Zelle
End If
Next
End If
Application.EnableEvents = True
End Sub

Anzeige
AW: 2x Private Sub Worksheet_Change zusammen
22.11.2021 10:55:31
UweD
Hallo
so?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim EingabeBereich As Range
Set EingabeBereich = Intersect(Target, Union(Columns(5), Columns(9)))
If EingabeBereich Is Nothing Then Exit Sub
If WorksheetFunction.Count(EingabeBereich) = 0 Then Exit Sub
Application.EnableEvents = False
For Each Zelle In EingabeBereich
If VarType(Zelle.Value) = vbDouble Then
If Target.Column = 5 Then
Zelle.Offset(0, 1).Value = Zelle.Offset(0, 1).Value + Zelle.Value
ElseIf Target.Column = 9 Then
Zelle.Offset(0, -2).Value = Zelle.Offset(0, -2).Value + Zelle.Value
End If
'Zelle.ClearContents
End If
Next
Application.EnableEvents = True
End Sub
LG UweD
Anzeige
AW: 2x Private Sub Worksheet_Change zusammen
22.11.2021 11:10:15
Stefan
Vielen Dank UweD, sowohl deine Variante als auch die vom Rudi funktionieren wunderbar:
L Stefan
AW: 2x Private Sub Worksheet_Change zusammen
22.11.2021 11:56:35
Daniel
Hi
Grundsätzlich ist es so, dass es immer nur ein Change-Event-Makro pro Tabellenblatt geben kann, welches automatisch ausgeführt wird.
hat man mehrere unterschiedliche Aktionen für unterschiedliche Zellbereiche, die ausgeführt werden müssen, dann ist die Grundregel:
verzichte auf das schnell und schlampig EXIT SUB, sondern schreibe ordentliche IF-Blöcke:
also statt:

If Bedingung1 then Exit Sub
hier der weitere Code
schreibt man:

if NOT Bedingung1 then
hier der weitere Code
End If
denn hier kann man dann weitere IF-Blöcke in beliebiger Anzahl anhängen, die auch dann abgearbeitet werden, wenn der erste nicht erfüllt ist.
in deinem fall sind aber die beiden Makros sehr ähnlich und machen fast das gleiche, da kann man das auch kompakter machen und in einen Ablauf packen:
ein paar Möglichkeiten das zu tun wurde dir ja schon gezeigt, ich pack nochmal eine drauf:

Dim Gütigkeitsbereich as Range
dim Zelle as Range
dim Off as long
Set Gültigkeitsbereich = Range("E:E,I:I")
if not Intersect(Target, Gültigkeitsbereich) is nothing then
for Each Zelle in Intersect(Target, Gültigkeitsbereich)
Off = IIF(Zelle.Column = 5, 1, -2)
Application.EnableEvents = False
if Isnumeric(Zelle.Value) then Zelle.Offset(0, Off).Value = Zelle.Offset(0, Off).Value + Zelle.Value
Application.EnableEvents = True
Next
End If
Gruß Daniel
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige