Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

SelectionChange - Change - Reihenfolge?

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


  

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




  

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!


 

Beiträge aus den Excel-Beispielen zum Thema "SelectionChange - Change - Reihenfolge?"