Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie zwei Private Sub WorksheetChange zusammenführ

Forumthread: Wie zwei Private Sub Worksheet_Change zusammenführ

Wie zwei Private Sub Worksheet_Change zusammenführ
29.03.2015 10:45:47
Karel

Guten Morgen Community,
wie bekomme ich zwei


Private Sub Worksheet_Change Makros zusammen?
einmal Datum Setzen und Anschließend Sortieren
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'If Target.Column <> 4 Or Target.Count > 1 Then Exit Sub
If Target.Column <> 4 Then Exit Sub
Cells(Target.Row, 20).Value = Format(Now, "dd.mm.yyyy")
'Cells(Target.Row, 21).Value = Time
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("T11:T100")) Is Nothing Then
Range("B11:AC150").Sort Key1:=Range("T11"), Order1:=xlAscending, Header:=xlNo
End If
End Sub
Habe es schon mit "Next" dazwischen versucht, will aber nicht recht.
Ich bedanke mich schon mal für das lesen und das sich annehmen meines Problemes!
freundliche Grüsse
Karel

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wie zwei Private Sub Worksheet_Change zusammenführ
29.03.2015 10:49:18
Hajo_Zi
Hallo Karel,
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'If Target.Column <> 4 Or Target.Count > 1 Then Exit Sub
If Target.Column = 4 Then
Cells(Target.Row, 20).Value = Format(Now, "dd.mm.yyyy")
End If
'Cells(Target.Row, 21).Value = Time
If Not Intersect(Target, Range("T11:T100")) Is Nothing Then
Range("B11:AC150").Sort Key1:=Range("T11"), Order1:=xlAscending, Header:=xlNo
End If
End Sub
Gruß Hajo

Anzeige
AW: Wie zwei Private Sub Worksheet_Change zusammenführ
29.03.2015 10:54:48
Gerd L
Hallo Karel!
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 4 Then Cells(Target.Row, 20).Value = Format(Now, "dd.mm.yyyy")
If Not Intersect(Target, Range("T11:T100")) Is Nothing Then
Range("B11:AC150").Sort Key1:=Range("T11"), Order1:=xlAscending, Header:=xlNo
End If
Application.EnableEvents = True
End Sub

Gruß Gerd

Anzeige
AW: Wie zwei Private Sub Worksheet_Change zusammenführ
29.03.2015 10:56:39
Karel
Hallo Hajo,
Jetzt geht, habe es verstanden end sub weg und end if dazwischen.
Ein Schöne Sonntag gewünscht
Hans

Wie zwei Private Sub Worksheet_Change zusammenführ
29.03.2015 11:13:05
Hajo_Zi
Hallo Hans,
und kein Exit Sub, das sollte man auch nicht verwenden.
Gruß Hajo

Anzeige
Exit-Anweisung
29.03.2015 11:44:11
Nepumuk
Hallo Hajo,
das solltest du schon ein bisschen genauer schreiben. Ich habe in jeder Routine ein Exit Sub / Function / Property drin. Nämlich vor dem Errorhandler.
Gruß
Nepumuk

Ich nicht, wenn danach noch Rücksetzungen ...
29.03.2015 12:29:33
Luc:-?
…erfolgen, Max,
also nur dann, falls so etwas nicht erforderlich ist. Ein generelles sollte man auch nicht verwenden lässt sich daraus allerdings nicht ableiten, genausowenig wie für andere SprachElemente wie zB [On …] GoTo, GoSub.
Gruß, Luc :-?

Anzeige
AW: Ich nicht, wenn danach noch Rücksetzungen ...
29.03.2015 12:36:01
Nepumuk
Hallo Luc,
weil ich Fehler grundsätzlich in einen zentralen Errorhandler umleite der alles zurücksetzt und alles neu initialisiert, ist das bei mir nicht notwendig.
Hier fürs Forum mach ich das natürlich nicht, da gibt es nur Beispiele wie es grundsätzlich funktioniert.
Gruß
Nepumuk

Anzeige
AW: Ich nicht, wenn danach noch Rücksetzungen ...
29.03.2015 12:37:47
Nepumuk
Achso,
wenn es Rücksetzungen geben muss, dann kann ja Resume Sprungmarke benutzt werden.

Aha, ist klar, halte ich für meine Zwecke zwar ...
29.03.2015 14:40:47
Luc:-?
…ebenfalls für möglich, Max,
aber da greift dann natürlich das Forum-Argument. Bei UDF-Komplexen in einem AddIn greift eh' schon einiges ineinander, aber das lässt sich dann nur mit ZusatzAufwand isoliert darstellen.
Resume sprungmarke hatte ich noch nicht dafür angewendet — ich hab's da lieber geradeaus und verwende ggf zuvor GoTo sprungmarke, wenn ich nicht gleich auf so etwas verzichte und nur If CBool(Err.Number) Then vor die FehlerBehandlung setze. Problematisch wdn ggf nur Rücksprünge ins Pgm bei bestimmten Fehlern, weil dann ein weiterer Fehler die ganze F-Behandlung unwirksam macht. Aber das kann man mit Resume und ggf vielen Sprungmarken ja auch umgehen…
Gruß, Luc :-?

Anzeige
AW: Wie zwei Private Sub Worksheet_Change zusammenführ
29.03.2015 12:38:37
Gerd L
Hallo, wen meint Hajo überhaupt?
Gruß Gerd
Hallo Hans,
und kein Exit Sub, das sollte man auch nicht verwenden.
Gruß Hajo

;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Zwei Private Sub Worksheet_Change zusammenführen


Schritt-für-Schritt-Anleitung

Um zwei Private Sub Worksheet_Change Makros in Excel zusammenzuführen, kannst du folgenden Code verwenden. Dieser Code kombiniert die Funktionalitäten von Datum setzen und Sortieren:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    If Target.Column = 4 Then
        Cells(Target.Row, 20).Value = Format(Now, "dd.mm.yyyy")
    End If

    If Not Intersect(Target, Range("T11:T100")) Is Nothing Then
        Range("B11:AC150").Sort Key1:=Range("T11"), Order1:=xlAscending, Header:=xlNo
    End If

    Application.EnableEvents = True
End Sub
  1. Öffne den Visual Basic for Applications (VBA) Editor: Drücke ALT + F11.
  2. Wähle das entsprechende Arbeitsblatt aus: Klicke auf das Arbeitsblatt, in dem du das Makro verwenden möchtest.
  3. Füge den obigen Code ein: Kopiere den Code in das Codefenster des Arbeitsblatts.
  4. Schließe den VBA-Editor: Klicke auf das X in der oberen rechten Ecke.

Häufige Fehler und Lösungen

  • Fehler: Makro wird nicht ausgeführt
    Lösung: Stelle sicher, dass die Application.EnableEvents auf True gesetzt ist, damit das Makro nach einer Änderung wieder aktiv wird.

  • Fehler: Ergebnis wird nicht angezeigt
    Lösung: Überprüfe, ob die Spalte 4 tatsächlich verändert wurde und dass die Zellen in dem angegebenen Bereich korrekt sind.


Alternative Methoden

Wenn du eine andere Herangehensweise ausprobieren möchtest, kannst du auch Worksheet_SelectionChange verwenden. Hier ein Beispiel, wie du das umsetzen kannst:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("T11:T100")) Is Nothing Then
        Target.Calculate
    End If
End Sub

Diese Methode führt Aktionen aus, wenn die Auswahl geändert wird, anstatt bei Änderungen in Zellen.


Praktische Beispiele

  1. Beispiel für Datum setzen: Wenn du einen Wert in die vierte Spalte eingibst, wird das aktuelle Datum automatisch in die 20. Spalte gesetzt.
  2. Beispiel für Sortierung: Wenn du Werte in den Bereich T11:T100 änderst, wird der Bereich B11:AC150 basierend auf der Spalte T sortiert.

Tipps für Profis

  • Verwende Application.EnableEvents: Dies verhindert, dass das Makro rekursiv aufgerufen wird, wenn du innerhalb des Makros Änderungen vornimmst.
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um die Funktionalität deines Codes zu erklären. Das hilft dir und anderen zukünftigen Benutzern.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Worksheet_Change und Worksheet_SelectionChange?
Worksheet_Change wird ausgelöst, wenn sich der Inhalt einer Zelle ändert, während Worksheet_SelectionChange ausgeführt wird, wenn die Auswahl einer Zelle geändert wird.

2. Kann ich mehrere Bedingungen innerhalb eines Worksheet_Change Makros haben?
Ja, du kannst mehrere If-Anweisungen verwenden, um verschiedene Bedingungen zu prüfen und unterschiedliche Aktionen auszuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige