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

Worksheet_SelectionChange(ByVal Target As Range)

Forumthread: Worksheet_SelectionChange(ByVal Target As Range)

Worksheet_SelectionChange(ByVal Target As Range)
16.02.2005 10:33:04
Olaf
Hallo,
ich benötige nach einer Änderung einer Zelle die Zeile, die geändert wurde.
Target.Row gibt mir ja nur die Zeile zurück, die nach der Änderung selektiert ist.
Hintergrund: Wenn in Spalte A egal in welcher Zeile ein Datum eingetragen wird, soll ein Eintrag rechts daneben erscheinen. Mit Formel geht das nicht, da auch manchmal Zeilen eingefügt werden.
Target.Row-1 geht auch nicht, da ja nicht jeder nach einer Änderung Enter drückt.
Gibt es eigentlich eine Möglichkeit, eine Sub zu starten, wenn nur in einer bestimmten Spalte eine Änderung erfolgt?
Vielen Dank schonmal!
Olaf
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_SelectionChange(ByVal Target As Range)
Galenzo
machst du z.B. so:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 And IsDate(Target) Then Target(1, 2) = "ein Eintrag"
End Sub

Hintergrund: Worksheet_Change wir bei Änderungen im Blatt ausgelöst und abgearbeitet.
Da nur auf Änderungen/Eintragungen in Spalte A reagiert werden soll, ist eine entsprechende Abfrage eingebaut: (If Target.Column = 1 ?) Diese ist auch gleich mal zusammengefaßt mit der 2. Bedingung, nämlich ob der Eintrag ein Datum ist. Dann wird rechts daneben was eingetragen - kannst du entsprechend anpassen.
Anzeige
AW: Worksheet_SelectionChange(ByVal Target As Range)
16.02.2005 11:08:19
Olaf
Danke, das ist aber erst die eine Hälfte.
Target ist ja immer die neue Zelle!!
Wenn ich also in A1 was ändere, ist nach dem Enter Target = A2!
Ich möchte aber Target = A1 haben und zwar auch wenn kein Enter erfolt, sonder Tab oder mit der Maus irgendwohin gesprungen wird. Also immer die zuletzt geänderte Zelle soll der Target sein.
Ansonsten funzt es ja.
Gruss
Olaf
Anzeige
AW: Worksheet_SelectionChange(ByVal Target As Range)
Galenzo
hää?
Target ist DIE Zelle (Bereich), der sich ändert. Nix neue Zelle.
Der Cursor steht nur in der nächsten Zelle, weil die manuelle Eingabe mit ENTER beendet wurde unt unter Extras/Optionen/Bearbeiten/nach unten ausgewählt ist.
Willst du nach der Eintragung wieder diese Zelle (also in der gerade was eingetragen wurde) auswählen?
Ddann schreibe das als letzte Anweisung in die Prozedur mit rein: Target.Select
ich hoffe das tut's - ansonsten müßtest du nochmal präziser beschreiben, WAS passieren soll, was selektiert werden soll usw.
Anzeige
AW: Ne, geht doch nicht!?
16.02.2005 15:37:53
Olaf
Hi,
geht aber leider nicht so.
Wenn ich in A1 ein Datum eingebe und Enter drücke, passiert erstmal garnichts.
Erst wenn ich wieder auf A1 gehe, arbeitet Excel die Sub ab.
Ich möchte aber beim Verlassen der geänderten Zelle die Einträge reinhaben.
Gruss
Olaf
AW: Geht doch!!
Galenzo
mußtu richtiges Ereignis nehmen!
Private Sub Worksheet_Change(ByVal Target As Range)
NICHT SelectionChange!!!!!
Anzeige
Oh Shit! ;-)))
16.02.2005 16:45:46
Olaf
Hi,
danke!!!
Genau das war der Fehler.
Gruss
Olaf
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Automatisierung von Zellenänderungen in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um die Worksheet_SelectionChange(ByVal Target As Range)-Ereignisprozedur in Excel effizient zu nutzen, kannst du folgende Schritte befolgen:

  1. Öffne die Visual Basic for Applications (VBA)-Umgebung:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle das gewünschte Arbeitsblatt:

    • Doppelklicke im Projektfenster auf das Arbeitsblatt, auf dem du die Änderungen verfolgen möchtest.
  3. Füge den VBA-Code ein:

    • Nutze den folgenden Code, um die Änderungen in Spalte A zu überwachen und einen Eintrag in Spalte B vorzunehmen:
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Count > 1 Then Exit Sub
       If Target.Column = 1 And IsDate(Target) Then
           Target.Offset(0, 1).Value = "ein Eintrag"
       End If
    End Sub
  4. Teste den Code:

    • Gehe zurück zu Excel und gib in eine Zelle in Spalte A ein Datum ein. Überprüfe, ob in der danebenliegenden Zelle (Spalte B) der Eintrag „ein Eintrag“ erscheint.

Häufige Fehler und Lösungen

  • Fehler: Der Eintrag wird nicht aktualisiert, wenn du die Zelle verlässt.

    • Lösung: Stelle sicher, dass du das Ereignis Worksheet_Change und nicht Worksheet_SelectionChange verwendest. Der Code sollte wie folgt aussehen:
    Private Sub Worksheet_Change(ByVal Target As Range)
  • Fehler: Die Zielzelle ist nicht die, die du bearbeitet hast.

    • Lösung: Du musst sicherstellen, dass du die korrekte Zelle bearbeitest und die Target-Variable richtig verwendest. Verwende Target.Offset(0, 1) um den gewünschten Eintrag zu machen.

Alternative Methoden

Wenn du andere Ansätze zur Automatisierung benötigst, kannst du die folgenden Methoden in Betracht ziehen:

  • Verwendung von Formeln: Statt VBA kannst du auch Excel-Formeln verwenden, um ähnliche Ergebnisse zu erzielen, jedoch mit Einschränkungen, wenn es um dynamische Zeilenänderungen geht.

  • Benutzerdefinierte Funktionen: Erstelle eine benutzerdefinierte Funktion in VBA, die du in deinen Zellen verwenden kannst, um Bedingungen zu prüfen und Einträge vorzunehmen.


Praktische Beispiele

Hier sind einige praktische Anwendungsszenarien für den Worksheet_Change-Event:

  • Beispiel 1: Wenn in Spalte A ein Datum eingegeben wird, soll in Spalte B automatisch das aktuelle Datum erscheinen.

    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Column = 1 And IsDate(Target) Then
          Target.Offset(0, 1).Value = Date
      End If
    End Sub
  • Beispiel 2: Füge in Spalte C einen Text ein, wenn in Spalte A ein bestimmter Wert eingegeben wird.

    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Column = 1 And Target.Value = "Test" Then
          Target.Offset(0, 2).Value = "Eintrag"
      End If
    End Sub

Tipps für Profis

  • Debugging: Nutze die Debug.Print-Anweisung, um den Wert von Target während der Ausführung zu überprüfen. Dies hilft dir, Fehler schneller zu finden.

  • Vermeide Schleifen: Achte darauf, dass dein Code keine endlosen Schleifen erzeugt, indem du die Application.EnableEvents-Eigenschaft verwendest, um Ereignisse vorübergehend zu deaktivieren.

  • Optimierung: Wenn du mit großen Datenmengen arbeitest, solltest du sicherstellen, dass deine Prozeduren effizient sind, um Verzögerungen zu vermeiden.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Worksheet_Change und Worksheet_SelectionChange? Worksheet_Change wird ausgelöst, wenn eine Zelle verändert wird, während Worksheet_SelectionChange aktiv wird, wenn die Auswahl einer Zelle geändert wird.

2. Wie kann ich mehrere Änderungen auf einmal erkennen? Du kannst die Target.Count-Eigenschaft nutzen, um abzubrechen, wenn mehr als eine Zelle gleichzeitig geändert wird.

3. Funktioniert dieser Code in allen Excel-Versionen? Ja, dieser VBA-Code sollte in allen modernen Excel-Versionen funktionieren, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige