SelectionChange - Change - Reihenfolge?
22.02.2008 13:41:00
oxe
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