AW: Bei Klick auf die Kopfspalten Makro ausführen.
27.03.2018 13:34:03
Robert
Hallo,
mit nachstehendem Code wird bei einem Doppelklick auf "Name" die Spalte "Vorname" als 2. Sortierschlüsel aufgenommen. Wichtig ist, die Namensspalte muss in der Überschrift mit "Name" bezeichnet sein und der Vorname in der Spalte rechts daneben stehen. Solltest Du die Überschrift z.B. in "Nachname" ändern wollen (was mir persönlich besser gefallen würde), muss das Makro an der entsprechenden Stelle angepasst werden (If Target = "Vorname" Then). Alternativ kann diese Codezeile auch in If Target.Column = 3 Then geändert werden. Dann muss der Name immer in Spalte C und der Vorname in Spalte D stehen, dann wäre es egal, wie die Spalten in der überschriftenzeile heißen.
Da im Verlauf des Makros die letzte Spalte in der Zeile 3 und die letzte Zeile in der Spalte A ermittelt und die Sortierung auf diesen Bereich angewendet wird, müsste das ganze auch mit neuen Spalten und neuen Zeile funktionieren. Wichtig ist dann nur, dass die neuen Spalten eine Überschrift in der Zeile 3 erhalten und bei neuen Zeilen (also neuen Mitglieder) eine Mitgliedsnummer in der Spalte A vergeben wird.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim lZ As Long, lS As Long
Cancel = True
If Target.Value = "" Then Exit Sub
If Target.Row = 3 Then 'Doppelklick in Zeile 3
lZ = Range("A" & Rows.Count).End(xlUp).Row 'letzte befüllte Zeile in Spalte A
lS = Cells(3, Columns.Count).End(xlToLeft).Column 'letzte befüllte Spalte in zeile 3
If Target.Column = lngC Then
blnOrder = IIf(blnOrder = 0, -1, 0)
Else
lngC = Target.Column
blnOrder = -1
End If
'Bei Sortierung nach Namen wird der Vorname als 2. Sortierschlüssel aufgenommen,
'Bedingungen: 1. Spalte "Vorname" muss direkt rechts neben Spalte "Name" liegen,
' 2. Überschrift der Namensspalte muss "Name" lauten oder in nächster Zeile _
angepasst werden
If Target = "Name" Then
Range(Range("A3"), Cells(lZ, lS)).Sort Key1:=Target, Order1:=blnOrder + 2, Key2:=Target. _
Offset(0, 1), Order2:=blnOrder + 2, Header:=xlYes
Else
Range(Range("A3"), Cells(lZ, lS)).Sort Key1:=Target, Order1:=blnOrder + 2, Header:= _
xlYes
End If
ElseIf Target.Column = 12 Then 'Doppelklick in Spalte L
'E-mail Adresse durch Doppelklick auf die Spalte der E-Mail Adresse als E-Mail formatieren
If IsValidMailAddress(Target) Then
Cancel = True
Me.Hyperlinks.Add Anchor:=Target, Address:="mailto:" & Target.Text, TextToDisplay:= _
Target.Text
End If
End If
End Sub
Gruß
Robert