Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1624to1628
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

SelectionChange Ereignis löst nicht aus

SelectionChange Ereignis löst nicht aus
17.05.2018 12:20:34
Raphi
Hallo zusammen.
Ich habe folgendes Problem:
Prinzipiell funktioniert mein VBA-Code einwandfrei. Allerdings habe ich in den Optionen eingestellt, dass die Zelle unter der bearbeiteten markiert wird, wenn ich diese mit ENTER bestätige. Das hat allerdings zur Folge, dass das Ereignis nicht ausgelöst wird und die Änderung in der Zelle erst erkannt wird, wenn ich die bearbeitete Zelle nochmals manuell anwähle. Erkennbar ist dies an den Zellen, die die Berechnung ausgeben und den Wert der geänderten Zelle verarbeiten.
Gibt es eine Möglichkeit diesen Fall ebenfalls zu integrieren? Ist diese Option in den Exceleinstellungen deaktiviert funktioniert alles.

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

Betreff
Datum
Anwender
Anzeige
AW: SelectionChange Ereignis löst nicht aus
17.05.2018 12:58:02
ChrisL
Hi Raphi
Wenn du diese Option meinst:
Userbild
Bei mir hat dies keinen Einfluss darauf, ob ein SelectionChange Ereignis ausgelöst wird oder nicht.
Lade eine Beispieldatei und erkläre, was das Ziel von der Ereignisroutine sein soll.
cu
Chris
AW: SelectionChange Ereignis löst nicht aus
20.05.2018 12:37:32
Raphi
Hallo Chris,
danke für die schnelle Antwort und entschuldige bitte die verspätete Rückmeldung.
Genau diese Option meine ich.
Mein Ziel ist es einen gewissen Zellbereich auf Änderungen überwachen zu lassen und bei Änderungen die Berechnung laufen zu lassen. Ich weiß, dass mein Vorhaben eigentlich leicht mit den Excelfunktionen umzusetzen ist, aber ich will meine VBA-Kenntnisse aus der Uni nicht vollständig einrosten lassen, was sie eh schon getan haben...

Option Explicit
Dim x As Double
Dim y As Double
Dim A As Double
Dim C As Double
Dim Q As Double
Dim Qnot As Double
Dim i As Integer
Dim j As Integer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A5:B20")) Is Nothing Then Exit Sub
Call berechnung
End Sub
Private Sub berechnung()
'~~~ einlesen der fixen Werte
x = Cells(1, 2)
y = Cells(2, 2)
'~~~ einlesen der variablen Werte
i = ActiveCell.Row                  'Legt i auf die aktuell markierte Zeile fest
j = ActiveCell.Column
A = Cells(i, 1)                     'einlesen von A aus der Zeile
C = Cells(i, 2)                     'einlesen von c aus der Zeile
'~~~ Eigentliche Berechnung
Q = x * C * A * 1 / 10000
Qnot = (y - x * C) * A / 10000
'~~~ Ausgabe
Cells(i, 3) = Q
Cells(i, 4) = Qnot
End Sub
Hier ist die Exceldatei als Beispiel.
https://www.herber.de/bbs/user/121715.xlsm
Anzeige
AW: SelectionChange Ereignis löst nicht aus
20.05.2018 12:42:11
Raphi
Bin noch neu im Forum und hab leider vergessen das Häkchen zu setzen.
AW: SelectionChange Ereignis löst nicht aus
21.05.2018 00:46:05
fcs
Hallo Raphi,
Worksheet_SelectionChange(ByVal Target As Range)

ist in deinem Fall nicht das geeignete Ereignis-Makro, denn dieses Ereignis-Makro wenn eine andere Zelle/anderer Zellbereich selektiert wird.
Du musst arbeiten mit
Worksheet_Change(ByVal Target As Range)

Diese Ereignis-Makro wird gestartet, wenn der Inhalt einer Zelle/eines Zellbereichs manuel oder per Makro geändert wird.
Der Variablen Target wird bei diesen beiden Ereignis-Makros die Zelle bzw. der Zellbereich zugewiesen der selektiert (bei Worksheet_SelectionChange) bzw. geändert (bei Worksheet_Change) wurde.
Des sollte/muss man in diesen Makros meistens mit der Variablen Target arbeiten und nicht mit ActiveCell, damit die Informationen korrekt verarbeitet werden.
In deinem Fall muss dazu Target als Parameter an das Makro Berechnung übergeben werden.
Weitere Punkte die zu Beachten sind:
  • Target kann auch mehrere Zellen beinhalten
    Dies muss ggf. im Makro berücksichtigt werden, indem man z.B. alle Zellen in einer Schleife abarbeitet.

  • nicht erwünschter wiederholter Aufruf des Ereignis-Makros
    Wenn ein Ereignis-Makro Aktionen ausführt (z.B. Werte in ein Tabellenblatt einträgt) dann ist es oft unerwünscht, dass diese Aktionen das Ereignis-Makro wiederholt auslösen.
    Denn es verlängert sich die Makroausführung, im Extremfall gerät das Makro in eine Endlosschleife.
    Dies kann man verhindern, indem man vorrübergehend die Ereignismakros deaktiviert.

  • Berechnungsmodus
    Werden durch die Aktionen des Makros viele Berechnungsformel betroffen, sollte der Berechnungsmodus
    vorrübergehend auf "manuelle Berechng" gesetzt werden, um sehr lange Ausführungszeiten eines Makros zu verhindern.

  • Nachfolgend der Code des T%abellenblatts angepasst.
    Gruß
    Franz
    Option Explicit
    Dim x As Double
    Dim y As Double
    Dim A As Double
    Dim C As Double
    Dim Q As Double
    Dim Qnot As Double
    Dim i As Integer
    Dim j As Integer
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A5:B20")) Is Nothing Then Exit Sub
    Application.EnableEvents = False 'Ereignismakros deaktivieren
    Call berechnung(Bereich:=Target)
    Application.EnableEvents = True 'Ereignismakros wieder aktivieren
    End Sub
    Private Sub berechnung(Bereich As Range)
    Dim Zelle As Range
    For Each Zelle In Bereich.Cells
    '~~~ einlesen der fixen Werte
    x = Cells(1, 2)
    y = Cells(2, 2)
    '~~~ einlesen der variablen Werte
    i = Zelle.Row             'Legt i auf die aktuell markierte Zeile fest
    j = Zelle.Column
    A = Cells(i, 1)           'einlesen von A aus der Zeile
    C = Cells(i, 2)           'einlesen von c aus der Zeile
    '~~~ Eigentliche Berechnung
    Q = x * C * A * 1 / 10000
    Qnot = (y - x * C) * A / 10000
    '~~~ Ausgabe
    Cells(i, 3) = Q
    Cells(i, 4) = Qnot
    Next Zelle
    End Sub
    

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige