Herbers Excel-Forum - das Archiv

SelectionChange - Change - Reihenfolge?

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: SelectionChange - Change - Reihenfolge?
von: oxe 23

Geschrieben am: 22.02.2008 13:41:00

Hallo zusammen!
Habe mal wieder ein blödes Problem:
Wenn in Spalte 5 des Tabellenblattes etwas geändert wird, dann wir nach den Werten in dieser Tabelle sortiert. Das funktioniert auch ohne Probleme über einen Worksheet_Change-Aufruf. Jetzt kann die Tabelle die dann sortiert wird aber sehr lang werden und damit die gerade bearbeitet Zeile nicht aus dem Blickfeld verschwindet (was wohl zu Verwirrungen führt) soll die Zelle die verändert wurde nach dem sortieren wieder ausgewählt sein. Das wollte ich über die Worksheet_SelectionChange-Methode machen indem ich jedes mal wenn man eine andere Zelle wählt in eine Merker-Variable die zuletzt gewählte Zelle schreibe und dann am Anfang der sortieren-Funktion in dieser Zeile am Ende eine "1" setze, diese mitsortiere, die Zelle in Spalte 5 und der Zeile mit der "1" am Ende auswählen lasse und dann die "1" wieder entferne.
Das Problem ist jetzt, dass, obwohl im Tabellenblatt (also da wo man auch das CommandButton1_Click einträgt) zuerst die SelectionChange-Funktion und dann die Change-Funktion steht zuerst die Change-Funktion aufgerufen wird und diese dann einen veralteten "vorige-Zelle"-Wert erhält, womit das Danze natürlich nicht funktioniert.
Was mache ich da? Kann ich da eine Priorität festlegen?
Zur Verdeutlichung noch ein paar Code-Auszüge:


Im Tabellenblatt:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If aktuell = "" Then aktuell = "0000"
merker = Format(Right(aktuell, Len(aktuell) - 3), "0")
aktuell = Target.Address
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
Call sortieren(merker)
End If
End Sub


Im Modul1:

Global aktuell As String
Global merker As Integer

und:


Sub sortieren(merker)
Application.EnableEvents = False
Application.ScreenUpdating = False
Dim wks_00_LOP As Worksheet
Set wks_00_LOP = ThisWorkbook.Worksheets("00_LOP")
Dim i As Integer
Dim merkerFund As Integer
wks_00_LOP.Unprotect (ThisWorkbook.Worksheets("Passwort").Cells(1, 1).Value)
wks_00_LOP.Cells(merker, 11).Value = "1"
Dim anzahlZeilen As Integer
anzahlZeilen = wks_00_LOP.Cells(wks_00_LOP.Rows.Count, 1).End(xlUp).Row
wks_00_LOP.Range("B7:K" & anzahlZeilen).Sort Key1:=wks_00_LOP.Range("D7"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For i = 7 To anzahlZeilen
If wks_00_LOP.Cells(i, 11).Value = "1" Then
merkerFund = i
wks_00_LOP.Cells(i, 11).Value = ""
End If
Next i
wks_00_LOP.Cells(merkerFund, 5).Select
wks_00_LOP.Protect (ThisWorkbook.Worksheets("Passwort").Cells(1, 1).Value)
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


Bild

Betrifft: AW: SelectionChange - Change - Reihenfolge?
von: fcs

Geschrieben am: 22.02.2008 14:44:54
Hallo oxe,
passe die Change-Prozedur wie folgt an, dann kannst du die Selection-Prozedur fortschmeissen. Die Deklaration der Gloabal Variablen ist dann auch nicht mehr erforderlich.
Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
Call sortieren(Target.row)
End If
End Sub


Bild

Betrifft: AW: SelectionChange - Change - Reihenfolge?
von: oxe 23
Geschrieben am: 22.02.2008 14:55:57
Genial, vielen Dank, es funktioniert!!
Da wollte ichs komplizierter machen als nötig, echt feine Lösung so, danke!

 Bild
Excel-Beispiele zum Thema "SelectionChange - Change - Reihenfolge?"
Beispiele zum Einsatz des SelectionChange-Ereignisses Im Change-Ereignis Eingabe in oder Leeren von Zellen erkennen
Makroverzweigung im Change-Ereignis Tabellenblätter in umgekehrter Reihenfolge drucken
Daten in umgekehrter Reihenfolge übertragen Reihenfolge einer Zahlenreihe nach dem Zufallsprinzip variieren
Änderung der Reihenfolge einer Wertereihe Werte in zweiter Tabelle in anderer Reihenfolge darstellen