Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1616to1620
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

Bei Klick auf die Kopfspalten Makro ausführen.

Bei Klick auf die Kopfspalten Makro ausführen.
23.03.2018 20:39:09
blangmantl
Hallo, bei angefügter Liste möchte ich folgendes erreichen
Per Doppelklick auf ein x beliebiges Feld der Kopfzeile sortiert schnell und automatisch die Liste nach diesem Kriterium. Ein erneuter Klick kehrt Ihnen eine aufsteigende Sortierung auf absteigend um.
Wer kann mir da helfen?
https://www.herber.de/bbs/user/120642.zip

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
23.03.2018 20:47:05
KlausF
Hi,
ich kann die beigefügte zip nicht öffnen
Für erste Zelle D7 folgender Code (bitte anpassen):
Dim lngC As Long, blnOrder As Boolean
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Target.Value = "" Then Exit Sub
If Target.Row  7 Then Exit Sub
If Target.Column = lngC Then
blnOrder = IIf(blnOrder = 0, -1, 0)
Else
lngC = Target.Column
blnOrder = -1
End If
Range("D7").CurrentRegion.Sort Key1:=Target, Order1:=blnOrder + 2, Header:=xlYes
End Sub
Gruß
Klaus
AW: Bei Klick auf die Kopfspalten Makro ausführen.
23.03.2018 21:00:25
blangmantl
Hallo Klaus, was meinst du mit Zeile D7 anpassen? Ich habe das Makro ins Worksheet eingefügt, nichts passiert.
Kann ich dir die Datei irgendwie anders zukommen lassen?
Die Kopfspalten stehen alle in Zeile 3 Also von A bis x und Dynamisch, falls sich das erweitert, soll jeweils das Makro ausgeführt werden, wenn in die Spalten doppeltgeklickt wird, bsp. in A1 stehen die Mitgliedsnummern in Zelle A3 die Spaltenüberschrift dort doppelklicken soll er die gesamte spalte sortieren.
Darf der Filter aktiv sein?
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
23.03.2018 21:42:05
KlausF
Hi,
[ Die Kopfspalten stehen alle in Zeile 3 Also von A bis x und Dynamisch ]
dann: If Target.Row 3 Then Exit Sub
und: Range("A3").CurrentRegion.Sort Key1:=Target, Order1:=blnOrder + 2, Header:=xlYes
Der Filter ist nicht aktiv weil das Makro keinen gesetzten Autofilter benötigt.
Klappt's?
Gruß
Klaus
noch etwas
23.03.2018 21:46:27
KlausF
noch etwas:
Das Makro mit Rechtsmausklick auf den Tabellenreiter in das Worksheet einfügen
und die Zeile
Dim lngC As Long, blnOrder As Boolean
als erste Zeile nicht vergessen ...
AW: Bei Klick auf die Kopfspalten Makro ausführen.
23.03.2018 21:49:12
blangmantl
Hallo Klaus,
nein Funktioniert nicht, da es einen Fehler gibt, kann das daran liegen, dass ich bereits ein doppelklick Makro laufen habe?
nämlich in spalte L wird bei doppelklick auf den Eintrag (dort stehen E-Mail Adressen, diese auch als E-Mail formatiert, wenn die durch z. B. Import nicht so formatiert sind, ich poste mal hier den jetigen gesamtcode, bitte passe das an, damit beides funktioniert
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Target.Value = "" Then Exit Sub
If Target.Row  3 Then Exit Sub
If Target.Column = lngC Then
blnOrder = IIf(blnOrder = 0, -1, 0)
Else
lngC = Target.Column
blnOrder = -1
End If
Range("A3").CurrentRegion.Sort Key1:=Target, Order1:=blnOrder + 2, Header:=xlYes
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'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 Sub
Private Function IsValidMailAddress(ByVal strAddress As String) As Boolean
Dim oRegExp As Object
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
.Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|" & _
"}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:" & _
"[a-z0-9-]*[a-z0-9])?"
.IgnoreCase = True
IsValidMailAddress = .test(strAddress)
End With
Set oRegExp = Nothing
End Function
P. S. Wie schaffe ich es, einen Text von einem vorherigen Post zu zieteiren? Irgendwie ist beim Antworten kein Zitatbutton da
Anzeige
sorry
23.03.2018 22:19:32
KlausF
Tut mir leid aber das überfordert mich jetzt. Das muss Dir jemand anderes anpassen,
weil ich einen Mac habe und mit dem 2. Doppelklick-Makro nichts anfangen kann.
Aber das ist natürlich eindeutig der Fehler ...
Gruß
Klaus
AW: Bei Klick auf die Kopfspalten Makro ausführen.
24.03.2018 15:14:46
Robert
Hallo,
es kann nur einen geben ;-). Soll heißen: Es kann nur ein "Doppelklick-Makro" je Tabellenblatt geben. Woher soll Excel sonst wissen welches es ausführen soll. Innerhalb eines Moduls müssen die Namen außerdem eindeutig sein.
Will man mehrere Sachen abdecken, muss man das in dieses eine Makro einbauen. Wenn Du das bei Dir wie folgt machst, dann prüft das Makro bei einem Doppelklick als erstes, ob die doppelgeklickte Zelle überhaupt einen Eintrag hat. Ist dies nicht der Fall, wird das Makro abgebrochen. Als nächstes prüft das Makro, ob die doppelgeklickte Zelle in der Zeile 3 steht. Ist dies der Fall, werden die Daten auf- bzw. absteigend sortiert. Erfolgt der Doppelklick nicht in der Zeile 3, prüft das Makro, ob eine Zelle in der Spalte L doppelgeklickt wurde. In diesem Fall wird der Zelleintrag ggfs. als EMail formatiert.
Option Explicit
Dim lngC As Long, blnOrder As Boolean
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Target.Value = "" Then Exit Sub
If Target.Row = 3 Then  'Doppelklick in Zeile 3
If Target.Column = lngC Then
blnOrder = IIf(blnOrder = 0, -1, 0)
Else
lngC = Target.Column
blnOrder = -1
End If
Range("A3").CurrentRegion.Sort Key1:=Target, Order1:=blnOrder + 2, Header:=xlYes
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
Private Function IsValidMailAddress(ByVal strAddress As String) As Boolean
Dim oRegExp As Object
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
.Pattern = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|" & _
"}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:" & _
"[a-z0-9-]*[a-z0-9])?"
.IgnoreCase = True
IsValidMailAddress = .test(strAddress)
End With
Set oRegExp = Nothing
End Function
Bei Übernahme des Makros vergiss bitte nicht, auch die Zeile der Variablendeklaration (Dim ...), die oberhalb des "Doppelklick-Makros" steht, mit aufzunehmen.
Gruß
Robert
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
25.03.2018 19:09:35
blangmantl
Hallo Robert, das Funktioniert gut, aber wie muss ich den Code ändern, wenn ich möchte, dass die Textfarbe schwarz bleibt, nicht blau wie bei Hyperlinks und die Schriftart soll wie die gesamte Tabelle in Arial 10 sein, wenn ich auf das Makro klicke wandelt er es mir immer in Arial 11 um und blau
AW: Bei Klick auf die Kopfspalten Makro ausführen.
25.03.2018 23:31:47
blangmantl
Außerdem gibts noch das Problem, wenn ich in die Spalten darüber also in Zeile 1 und 2 noch Formel reinbaue (in zeile 2 sollen noch Zähler kommen und in Spalte 1 Hyperlinks, dann macht er einen Fehler, nämlich er sortiert dann die zeile 3 mit, er soll aber erst ab zeile 4 anfangen Ich habe zum testen noch mal die aktuelle Datei mit dem Makro reingestellt
https://www.herber.de/bbs/user/120668.zip
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
26.03.2018 01:41:18
blangmantl
Muss mich revidieren, ich erweitere die Tabelle stetig, wenn ich ein Kriterium sortiere und dass dann bei anderen Spalten ebenfalls probiere, dann schmeißt er alle Daten durcheinander. Das geht nicht, es muss immer die gesamte Tabelle sortiert werden, egal ob Daten dazu kommen oder mehr spalten und bitte auch das Problem beachten, das ich im Post vorher angeschnitten habe
Außerdem gibts noch das Problem, wenn ich in die Spalten darüber also in Zeile 1 und 2 noch Formel reinbaue (in zeile 2 sollen noch Zähler kommen und in Spalte 1 Hyperlinks, dann macht er einen Fehler, nämlich er sortiert dann die zeile 3 mit, er soll aber erst ab zeile 4 anfangen Ich habe zum testen noch mal die aktuelle Datei mit dem Makro reingestellt
Schon mal Danke und Gruß
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
26.03.2018 01:41:37
blangmantl
Muss mich revidieren, ich erweitere die Tabelle stetig, wenn ich ein Kriterium sortiere und dass dann bei anderen Spalten ebenfalls probiere, dann schmeißt er alle Daten durcheinander. Das geht nicht, es muss immer die gesamte Tabelle sortiert werden, egal ob Daten dazu kommen oder mehr spalten und bitte auch das Problem beachten, das ich im Post vorher angeschnitten habe
Außerdem gibts noch das Problem, wenn ich in die Spalten darüber also in Zeile 1 und 2 noch Formel reinbaue (in zeile 2 sollen noch Zähler kommen und in Spalte 1 Hyperlinks, dann macht er einen Fehler, nämlich er sortiert dann die zeile 3 mit, er soll aber erst ab zeile 4 anfangen Ich habe zum testen noch mal die aktuelle Datei mit dem Makro reingestellt
Schon mal Danke und Gruß
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
26.03.2018 20:18:59
Robert
Hallo,
zum Thema Sortierung:
Normalerweise ist es besser, wenn eine Tabelle mit Leerzeilen und Leerspalten von dem übrigen Daten abgegrenzt ist. Nur dann funktionieren auch die Excelfunktionen wie z. B. das Sortieren oder Filtern mit den normalen Schaltflächen zuverlässig.
Für Deine Liste habe ich das Doppelklick-Makro dahingehend geändert, dass nicht der komplette Bereich um die Zelle A3, der mit Daten befüllt ist (Range("A3").CurrentRegion) genommen wird. Dies wäre nämlich in Deiner Beispieldatei, wenn z.B. die Zellen B1 und B2 noch befüllt werden der Bereich A1:U46. Stattdessen wird die letzte Zeilennummer mit Daten in der Spalte A und die letzte Spaltennummer mit Daten in der Zeile 3 ermittelt. Dann wird nur der Bereich von A3 bis zur letzten befüllten Zeile/Spalte (hier U46) sortiert.
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
Range(Range("A3"), Cells(lZ, lS)).Sort Key1:=Target, Order1:=blnOrder + 2, Header:=xlYes
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

zum Thema Hyperlink:
Wie Hyperlinks formatiert werden ist in einer Formatvorlage gespeichert. Diese kannst Du Deinen Wünschen anpassen. Öffne im Reiter "Start" im Bereich "Formatvorlage" die "Zellenformatvorlagen". Dort kannst Du dann den Eintrag "Hyperlink" mit der rechten Maustaste auswählen. Wenn Du dann "Ändern ..." auswählst, kannst Du über "Formatieren ..." die automatische Formatierung der Hyperlinks Deinen Wünschen anpassen.
Userbild
Gruß
Robert
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
26.03.2018 20:42:16
blangmantl
Hallo, scheint ja soweit zu funktionierne, danke, jetzt eine Amatuerfrage, wenn ich die Tabelle noch erweitere, das heißt noch mehr spalten und noch mehr zeilen, ist das in diesem makro schon berücksichtigt? oder muss ich das anpassen? Wenn ja wie?
AW: Bei Klick auf die Kopfspalten Makro ausführen.
26.03.2018 23:40:01
blangmantl
Und noch eine Frage, könnte das Makro so geändert werden, dass wenn man auf Nachnamen doppeltklickt (Spalte c) Das er dann nach Nachnamen und Vornamen sortiert ansonsten nur das jeweilige SpaltenKriterium?
und wenn ich die gesamte Tabelle als Tabelle einfüge, also dass Sie dynamisch wird, funktioniert es dann auch?
Hier die aktuelle Version
https://www.herber.de/bbs/user/120687.zip
Anzeige
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
Anzeige
AW: Bei Klick auf die Kopfspalten Makro ausführen.
27.03.2018 16:07:24
blangmantl
Hallo Robert,
erstmal vielen herzlichen Dank für die Anpassung, gefällt mir gut die Lösung.
Allerdings hast du meine Frage bzgl. der dynamischen Tabelle noch nicht beantwortet. ich möchte nämlich alles dynamisch umwandeln, dass neben dem was das Makro macht noch andere Filteroptionen möglich sind.
Würde das in irgendeiner Weise das Makro stören?
AW: Bei Klick auf die Kopfspalten Makro ausführen.
27.03.2018 16:49:20
Robert
Hallo,
das müsste auch funktionieren. Aber wieso probierst Du das nicht einfach aus. Ein Test ist mit einer Hand voll Klicks doch schnell gemacht ("Einfügen" - "Tabelle" - ggfs. Bereich anpassen - "OK" und dann die Sortierungen / Filter und was Du sonst noch willst mal durchspielen).
Gruß
Robert

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige