Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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
2 Worksheet_Change im gleichen Worksheet
05.09.2023 09:52:50
Marco
Hallo zusammen,

ich habe schon recherchiert und versucht die Logik dahinter zu verstehen. Aber meine mangelnden Kenntnise über VBA reichen leider nicht aus, um die Lösung selbst zu finden.
Ich habe zwei Worksheet Changes, die in der gleichen Arbeitsmappe unbedingt unabhängig voneinander funktionieren müssen, da es sonst durch ein drittes Worksheet Change in einer anderen Arbeitsmappe zu einem Loop kommen würde.

Private Sub Worksheet_Change(ByVal Target As Range)

If .Address > "$D$5" Then Exit Sub
Sheets("Berechnung").Range("O2") = CStr(Sheets("Entwicklungsbericht").Range("D5"))
End With
End Sub

Dieser überträgt eine ID in eine Berechnung ein, wodurch Daten vorausgefüllt werden können, die dann auch folgende Funktion aufruft, da in A8 und A10 Daten eingetragen werden.
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Kopf1 As String, Kopf2 As String, Datums As String
With Target
If .Address > "$A$8" And .Address > "$A$10" Then Exit Sub
Datums = Date
Sheets("Entwicklungsbericht").Range("B35") = Datums
Sheets("Entwicklungsbericht").Range("A50") = Datums
Kopf1 = "Entwicklungsbericht: " & CStr(Sheets("Entwicklungsbericht").Range("A8")) & ", *" & CStr(Sheets("Entwicklungsbericht").Range("A10")) & Chr(13) & "vom: " & CStr(Sheets("Entwicklungsbericht").Range("B35")) & " - &P/&N"
Kopf2 = "Entwicklungsbericht: " & CStr(Sheets("Entwicklungsbericht").Range("A8")) & ", *" & CStr(Sheets("Entwicklungsbericht").Range("A10")) & Chr(13) & "vom: " & CStr(Sheets("Entwicklungsbericht").Range("B35")) & ", Beratungshinweise"
Sheets("Beratungshinweise").PageSetup.RightHeader = Kopf2
Sheets("Entwicklungsbericht").PageSetup.RightHeader = Kopf1
End With
End Sub

Gleichzeitig soll aber auch die Möglichkeit bestehen ohne ID das Datenblatt auszufüllen, daher fällt mir keine andere Lösung ein.

Könnte mir jemand eine Möglichkeit nennen, dies zu kombinieren?

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

Betreff
Datum
Anwender
Anzeige
AW: 2 Worksheet_Change im gleichen Worksheet
05.09.2023 10:21:35
peter
Hallo

Im Prinzip so:



Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$5" Then
'mach etwas
Sheets("Berechnung").Range("O2") = CStr(Sheets("Entwicklungsbericht").Range("D5"))
end if

If (Target.Address = "$A$8") or (Target.Address = "$A$10") Then
'mach etwas anderes
end if
End Sub


Peter
AW: 2 Worksheet_Change im gleichen Worksheet
05.09.2023 10:23:16
Sigi.21
Hallo Marco,

es gibt nur ein (1) Worksheet_Change-Ereignis. Du kannst aber die beiden Makros auslagen, etwa so ...

Private Sub Worksheet_Change(ByVal Target As Range)
If DEINE_BEDINGUNG Then
Call Makro1(Target)
Else
Call Makro2(Target)
End If
End Sub

Wobei die beiden Makros evtl. in einem normalen Modul stehen müssen. Ggf. ausprobieren.

Gruß Sigi
Anzeige
AW: 2 Worksheet_Change im gleichen Worksheet
05.09.2023 10:36:11
Ulf
Workbook-Events verwenden:



Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Kopf1 As String, Kopf2 As String, Datums As String
Select Case Sh.Name
Case "Blatt1" 'ANPASSEN
If Target.Address > "$D$5" Then
Exit Sub
Else
ThisWorkbook.Worksheets("Berechnung").Range("O2") = CStr(ThisWorkbook.Worksheets("Berechnung").Sheets("Entwicklungsbericht").Range("D5"))
End If
Case "Blatt2" 'ANPASSEN
With Target
If .Address > "$A$8" And .Address > "$A$10" Then
Exit Sub
Else
Datums = Date
ThisWorkbook.Worksheets("Entwicklungsbericht").Range("B35") = Datums
ThisWorkbook.Worksheets("Entwicklungsbericht").Range("A50") = Datums
Kopf1 = "Entwicklungsbericht: " & CStr(ThisWorkbook.Worksheets("Entwicklungsbericht").Range("A8")) & ", *" & CStr(Sheets("Entwicklungsbericht").Range("A10")) & Chr(13) & "vom: " & CStr(ThisWorkbook.Worksheets("Entwicklungsbericht").Range("B35")) & " - &P/&N"
Kopf2 = "Entwicklungsbericht: " & CStr(ThisWorkbook.Worksheets("Entwicklungsbericht").Range("A8")) & ", *" & CStr(Sheets("Entwicklungsbericht").Range("A10")) & Chr(13) & "vom: " & CStr(ThisWorkbook.Worksheets("Entwicklungsbericht").Range("B35")) & ", Beratungshinweise"
ThisWorkbook.Worksheets("Beratungshinweise").PageSetup.RightHeader = Kopf2
ThisWorkbook.Worksheets("Entwicklungsbericht").PageSetup.RightHeader = Kopf1
End If
End With
End Select
End Sub

hth
Ulf
Anzeige
AW: 2 Worksheet_Change im gleichen Worksheet
05.09.2023 12:23:08
onur
"ich habe schon recherchiert und versucht die Logik dahinter zu verstehen. "
Die Hauptlogik dahinter ist: Diese Eventmakros stellt dir VBA zur Verfügung und zwar nur jeweils 1x pro Ereignis.
Das bedeutet: Du musst die nehmen, die dir das Modulfenster des Blattes anbietet und NICHT selber irgend welche schreiben. Wenn du DAS einmal kapiert hast, kommst du evtl automatisch selbst auf die Idee, wie man beide Bedingungen in einem einzigen Makro kombinieren könnte....
2 Worksheet_Change im gleichen Worksheet
05.09.2023 15:36:20
Marco
Hallo zusammen,

eure Lösungen haben für mich so zwar nicht 1 zu 1 funktioniert, mir aber geholfen auf die Lösung zu kommen.

Im Prinzip habe ich erst definiert auf welche Eingaben allgemein reagiert werden sollen. (Das scheint nur einmalig zu gehen, das war mein eigentliches Problem)
Private Sub Worksheet_Change(ByVal Target As Range)

Dim Kopf1 As String, Kopf2 As String, Datums As String
If Target.Address = "$A$8" Or Target.Address = "$A$10" Or Target.Address = "$D$5" Then

Dann wenn in eines der drei Felder etwas eingegeben wird, mit If Then und ElseIf Then die beiden Eingaben nacheinander nochmals voneinander unterschieden.
        If Target.Address = "$A$8" Or Target.Address = "$A$10" Then

Datums = Date
Sheets("Entwicklungsbericht").Range("B35") = Datums
Sheets("Entwicklungsbericht").Range("A50") = Datums
Kopf1 = "Entwicklungsbericht: " & CStr(Sheets("Entwicklungsbericht").Range("A8")) & ", *" & CStr(Sheets("Entwicklungsbericht").Range("A10")) & Chr(13) & "vom: " & CStr(Sheets("Entwicklungsbericht").Range("B35")) & " - &P/&N"
Kopf2 = "Entwicklungsbericht: " & CStr(Sheets("Entwicklungsbericht").Range("A8")) & ", *" & CStr(Sheets("Entwicklungsbericht").Range("A10")) & Chr(13) & "vom: " & CStr(Sheets("Entwicklungsbericht").Range("B35")) & ", Beratungshinweise"
Sheets("Beratungshinweise").PageSetup.RightHeader = Kopf2
Sheets("Entwicklungsbericht").PageSetup.RightHeader = Kopf1


ElseIf Target.Address = "$D$5" Then
Sheets("Berechnung").Range("O2") = Target.Value
End If
End If
End Sub


Anzeige
2 Worksheet_Change im gleichen Worksheet
05.09.2023 16:26:21
daniel
Ums mal zusammenzufassen:

deine ursprünglichen Codes waren "schlampig" programmiert in diesem Stil: Exit Sub statt vollständigen IF-Block:

IF Bedingung1 nicht erfüllt THEN Exit Sub

hier dann der Code des Makros


das macht man ganz gerne, vorallem bei längeren Codes weil man dann kein END IF noch als abschluss benötigt.
der Nachteil ist, dass man damit keine weiteren Bedingungen oder Fälle mehr hinzufügen kann, weil ja sofort abgebrochen wird.

Sauber mit vollständigem IF-Block sieht das ganze dann so aus:

IF Bedingung erfüllt Then

hier der Code des Makros
End IF

und hier lassen sich dann auch problemlos weitere Fälle und Bedingungen hinzufügen.

wenn beide Fälle unabhängig von einander sind (und ggf sogar beide ausgeführt werden sollen) dann:

IF Bedingung1 erfüllt Then

hier der Code des Makros1
End IF

IF Bedingung2 erfüllt Then
hier der Code des Makros2
End IF


wenn maximal einer von beiden Fällen ausgeführt werden soll in dieser Form in einem gemeinsamen IF-Block.
IF Bedingung1 erfüllt Then

hier der Code des Makros1
ELSE IF Bedingung2 erfüllt Then
hier der Code des Makros2
End IF


Gruß Daniel
Anzeige
2 Worksheet_Change im gleichen Worksheet
05.09.2023 12:48:37
GerdL
Hallo Marco,

willst du zwei Change-Prozeduren im selben Blatt (namens ?) oder je eines in zwei verschieden Blättern (welches zu welchem Blatt namens ?)
Insofern ist dein Betreff und dein Text abweichend.

Gruß Gerd

96 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige