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

Forumthread: Change / Selection Change

Change / Selection Change
11.08.2004 15:49:16
eres
Hallo Excel-Profis,
nach langem rumprobieren (und mit Hilfe von Chris (Danke)) bin ich zu der Erkenntnis gelangt, dass die Veränderung eines Zellinhaltes (z.B. Feld A1 ist aktiv und enthält den Wert 10, nun wird die 10 durch eine 11 überschrieben und mit ENTER bestätigt, so wird:
1. ein Change-Ereignis ausgelöst (klar, da der Wert ja geändert wurde)
2. und zusätzlich auch ein ChangeSelection-Ereignis ausgelöst (obwohl die Adresse der aktiven Zelle nicht geändert wurde (Application.MoveAfterReturn steht auf False))
Gibt es in VBA die Möglichkeit, bei der obigen Aktion (Zelländerung von 10 in 11) das ChangeSelection-Ereignis zu unterdrücken ?
Vielen Dank und Gruss
eres
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Change / Selection Change
11.08.2004 16:11:49
chris
Chris, sorry, hatte ich noch nicht gesehen. Werde mich umgehend bei Thomas bedanken.
AW: Change / Selection Change
11.08.2004 16:21:07
ANdreas
Hallo Eres,
habe mir das ganze nicht durchgelesen, einfach mal etwas Code geschrieben, mit welchem man mit dem Problem sauber umgehen kann:

Private Function SetSelectionChange(Optional intParam%) As Boolean
Static blnSelectionChange As Boolean
Select Case intParam
Case 1, 2: blnSelectionChange = intParam - 1
End Select
SetSelectionChange = blnSelectionChange
End Function


Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(0, 0)
Case "A1":
SetSelectionChange 2
MsgBox "SelectionChange Merker gesetzt"
End Select
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If SetSelectionChange Then
SetSelectionChange 1
Else
'Dein Code der bei "normaler" SelectionChange ausgeführt werden soll
MsgBox "Test: Code bei SelectionChange wird gewünscht durchlaufen"
End If
End Sub

Kurze Erklärung: Wird in Zelle A1 das Change-Ereignis ausgelöst, so wird parallel dazu ein Merker gesetzt. Daraufhin wird das SelectionChange Ereignis durchlaufen. In diesem wird der Merker ausgelesen und je nachdem, der Code durchlaufen oder auch nicht.
Hoffe das hilft weiter,
Andreas
Nibbles für Excel
Anzeige
AW: Change / Selection Change
12.08.2004 07:16:29
eres
Vielen Dank Andreas, vielen Dank für Deinen Ansatz. In diese Richtung hatte ich auch schon gedacht. Da muss dann tatsächlich eine Variable ran, um abzuprüfen ob ein Ereignis bereits durchlaufen ist.
Ist aus meiner Sicht zwar nicht besonders schön, aber sicherlich ein gut funktionierender Weg.
Nochmals vielen Dank.
eres
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit Selection Change in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne dein Excel-Dokument und gehe zum Visual Basic for Applications (VBA) Editor, indem Du ALT + F11 drückst.

  2. Wähle das Arbeitsblatt aus, in dem Du das Selection Change-Ereignis implementieren möchtest.

  3. Füge den folgenden Code in das entsprechende Arbeitsblatt-Modul ein:

    Private Function SetSelectionChange(Optional intParam%) As Boolean
       Static blnSelectionChange As Boolean
       Select Case intParam
           Case 1, 2: blnSelectionChange = intParam - 1
       End Select
       SetSelectionChange = blnSelectionChange
    End Function
    
    Private Sub Worksheet_Change(ByVal Target As Range)
       Select Case Target.Address(0, 0)
           Case "A1":
               SetSelectionChange 2
               MsgBox "SelectionChange Merker gesetzt"
       End Select
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       If SetSelectionChange Then
           SetSelectionChange 1
       Else
           ' Dein Code der bei "normaler" SelectionChange ausgeführt werden soll
           MsgBox "Test: Code bei SelectionChange wird gewünscht durchlaufen"
       End If
    End Sub
  4. Teste den Code, indem Du den Wert in Zelle A1 änderst. Du solltest eine Nachricht erhalten, wenn das Selection Change-Ereignis ausgelöst wird.


Häufige Fehler und Lösungen

  • Fehler: Das Selection Change-Ereignis wird trotz der Variablen immer ausgelöst.

    • Lösung: Überprüfe, ob der Merker in der Funktion SetSelectionChange richtig gesetzt wird. Achte darauf, dass die verschiedenen Fälle (1, 2) korrekt behandelt werden.
  • Fehler: Fehlermeldung bei der Ausführung des Codes.

    • Lösung: Stelle sicher, dass die richtigen Zelladressen verwendet werden und dass das Arbeitsblatt-Modul korrekt ausgewählt ist.

Alternative Methoden

Eine alternative Methode zur Nutzung von Selection Change in Excel VBA könnte die Verwendung von Application.MoveAfterReturn sein. Wenn Du diese Einstellung auf True setzt, wird nach einer Zelländerung automatisch zur nächsten Zelle gewechselt, was das Handling erleichtern kann.

Application.MoveAfterReturn = True

Verwende diese Einstellung, um die Benutzererfahrung zu verbessern, wenn Du häufig mit Selection Changes arbeitest.


Praktische Beispiele

  1. Automatische Berechnung bei Änderung: Wenn Du eine Berechnung basierend auf einer Zelländerung durchführen möchtest, kannst Du dies im Worksheet_Change-Ereignis implementieren.

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
           Me.Range("B1").Value = Target.Value * 2
       End If
    End Sub
  2. Datenvalidierung: Du kannst auch eine Datenvalidierung durchführen, wenn sich der Inhalt einer Zelle ändert.

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
           If Target.Value < 0 Then
               MsgBox "Bitte geben Sie einen positiven Wert ein!"
               Target.Value = ""
           End If
       End If
    End Sub

Tipps für Profis

  • Nutze die Workbook-Ereignisse für eine globale Anwendung von Selection Change. Zum Beispiel kannst Du das Workbook_SheetChange-Ereignis verwenden, um das Verhalten für alle Blätter zu steuern.
  • Halte Deinen Code modular und übersichtlich, indem Du häufig verwendete Logik in separate Funktionen auslagerst.
  • Verwende Option Explicit am Anfang jedes Moduls, um sicherzustellen, dass alle Variablen deklariert sind, was die Fehlersuche erleichtert.

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 ausgelöst wird, wenn der Benutzer die Auswahl einer Zelle ändert.

2. Wie kann ich verhindern, dass das Selection Change-Ereignis bei bestimmten Änderungen ausgelöst wird?
Du kannst eine Variable verwenden, um zu steuern, ob das Ereignis ausgeführt werden soll. Setze einen Merker im Worksheet_Change und prüfe diesen im Worksheet_SelectionChange.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige