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

Makro Sortierung mit Kontrollkästchen

Makro Sortierung mit Kontrollkästchen
21.12.2021 13:09:25
Hakan
Hi zusammen,
In einer Tabelle mit Nebenkosten, die ich bisher mit 0 und 1 als bezahlt bzw offen markiert hatte, habe ich nun Kontrollkästchen hinzugefügt und dabei die Option "Objektpositionierung: Von Zellposition und Größe unabhängig" eingestellt, damit die Kästchen bei einer Sortierung der Tabelle an der gleichen Stelle bleiben, aber die Zellbezüge aktualisiert werden. Wenn ich die Tabelle manuell sortiere, dann funktioniert das auch wunderbar.
Da ich nicht so gute VBA Kenntnisse habe, habe ich ein Makro aufgezeichnet, um den Sortiervorgang mit einem Knopfdruck auszuführen. Dabei werden die Kontrollkästchen aber nicht korrekt behandelt sondern verschieben sich. Also manuelle Sortierung HUI, aufgezeichnete Makro Sortierung PFUI
Ich habe hier auch ein kleines Demo Excel (mit Makros) hochgeladen, dass das Problem demonstriert.
https://www.herber.de/bbs/user/149931.zip
Wem das zu riskant ist (kann ich verstehen :) der kann das aber einfach selbst nachstellen. In dem Demo Excel sind in Spalte A drei Zeile mit den Werten 1, 2 und 3. In Spalte B drei Kontrollkästchen. Wenn ich jetzt manuell nach Spalte A sortiere, werden die Bezüge der Kontrollkästchen geändert, alles supi.
Diesen Sortiervorgang habe ich dann mit dem Makro Recorder in dem Makro "TEST" aufgezeichnet, bei dieser Aufzeichnung funktioniert die Sortierung auch noch so wie sie soll. Nur wenn ich danach die Sortierung über das Makro ausführe, werden die Kontrollkästchen mit sortiert und die Bezüge nicht geändert. Die Kästchen verhalten sich danach auch etwas seltsam. Einfach mal selber ausprobieren. Und biiitte eine Lösung posten.
Danke schön!!
Hier noch das aufgezeichnete Makro aus meiner Original Excel zur Sortierung. Ich sortiere nach 3 Spalten. Da fehlt vermutlich -hoffentlich- nur ein Parameter, der bei der manuellen Sortierung gesetzt ist, bei der Aufzeichnung aber nicht ins VBA Script mitgeschrieben wird

Sub Nebenkosten_sortieren()
' Nebenkosten_sortieren Makro
' Tastenkombination: Strg+n
Application.Goto Reference:="Nebenkosten"
ActiveWorkbook.Worksheets("NEBENKOSTEN").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("NEBENKOSTEN").Sort.SortFields.Add2 Key:=Range( _
"E2:E28"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("NEBENKOSTEN").Sort.SortFields.Add2 Key:=Range( _
"C2:C28"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("NEBENKOSTEN").Sort.SortFields.Add2 Key:=Range( _
"B2:B28"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("NEBENKOSTEN").Sort
.SetRange Range("A1:V28")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Sortierung mit Kontrollkästchen
21.12.2021 13:48:05
Yal
Hallo Hakan,
Löblisch, dass Du solche scheinbare Verbesserung versuchst, aber es wäre fahrlässig, dich nicht zu warnen, dass Du viel unnötige Komplizierung in deinem Excel reinbringt. Excel erlaubt sehr viel, aber nicht alles davon ist sinnvoll und es gibt sogar vieles, was sehr schnell zu einem Klotz am Bein wird.
Zuerst die Lösung (bzw. Workaround), dann die Erklärung:
Anstatt diese Checkbox (u.a. gefährlich, weil zu schnell verklickt "äh? habe ich die richtige erwicht? was war davor"), setze lieber eine Datenüberprüfung (Menü "Daten", "Datenüberprüfung") mit Liste "Ja;Nein", "Todo;Erledigt", "Rot;Grün;Blau", was auch immer. Dann hast Du einen Dropdown, die man bewusst und reflektiert anklicken muss. Diese Funktion ist Teil der Zelle und wird mitkopiert. Wenn Du eine "intelligente" Tabelle verwendest ("Einfügen", "Tabelle") nimmt jede neue Zeile sofort diese Einstellung mit. Es stört auch die Sortierung nicht.
Warum nicht Checkbox?
Es gibt einige Konzept, die sich in den letzte 50 Jahren bewährt haben. Ein wesentliche davon ist "Modell-View-Controller": trenne und halte die drei Aspakte Datenhaltung (Modell), Datenpräsentation (View) und Datenverarbeitung (Controller) ausseinander. Nur so hast Du eine langfristige stabile Datenapplikation.
Die Checkbox sind teils Präsentation, teils Verarbeitung (Dateneingabe), teils Datenhaltung, weil direkt mit der Wert gebunden. Wie gesagt, Excel erlaubt und begünstigt diese Mischung. Es verlangt Disziplin, sich nicht gehen zu lassen. Sonst kommst Du schnell in der Situation, wo Du erklären muss, warum es so lang dauert, warum es unflexibel, warum es fehlerhaft, nicht übertragbar, erweiterbar, und, und, und.
Nicht desto trotz: zum Spielen/Probieren ja, zum Arbeiten lieber nicht.
VG
Yal
Anzeige
AW: Makro Sortierung mit Kontrollkästchen
21.12.2021 16:39:08
Hakan
Hi
Danke für das schnelle Feedback.
Das einfache an 0 und 1 bzw Falsch und Wahr der Checkbox war, das ich den Wert für die Multiplikation verwenden konnte.
Spalte A enthält den Preis, Spalte B hatte 0 bzw jetzt "Falsch" für "Offen" oder 1 bzw jetzt "Wahr" für bezahlt.
Spalte C hatte die Formel A-(A`*B) und spuckt den Wert von A aus, wenn der Betrag noch offen ist oder 0 wenn der Betrag bezahlt wurde.
Mit einem Ja/Nein Feld müsste ich dann eine WENN Formel anwenden um den Wert abzufangen oder wieder mit 0 und 1 arbeiten.
Mit dem Kästchen sind alle jetzt eigentlich ganz glücklich weil die Bedienung mit dem Finger über ein Touchpanel gemacht wird und durch die Kontrollkästchen erheblich vereinfacht habe. Vorher musste man mit dem Finger reinklicken, auf der virtuellen Tastatur die 1 und Enter eintippen. Da ist der Druck auf die Checkbox deutlich einfacher.
Ich kann notfalls auch mit der manuellen Sortierung leben da die Nebenkosten sich nicht so oft ändern, wäre halt schön gewesen weil die anderen Bediener es dann selbst machen können ohne Gefahr zu laufen, etwas zu übersehen und die Tabelle zu zerschießen (was sie nicht machen sondern mich anrufen :).
Mich wundert es nur, warum die Kästchen bei der manuellen Sortierungen korrekt behandelt werden und bei einem aufgezeichneten Makro nicht.
Ist denn an dem Sortierscript irgendwas, das dafür sorgt das sich die Sortierung beim Aufruf als Makro anders verhält, als meiner einer manuellen Sortierung?
Anzeige
AW: Makro Sortierung mit Kontrollkästchen
21.12.2021 16:57:18
Yal
Hallo Hakan,
dann schlage ich folgende Alternativ vor: Das Abfangen des Doppelklicken, um einen Daten-Switch zwischen "Wahr und "Falsch" zu machen:
Falsch + Doppelklick --> Wahr
Wahr + Doppelkliock --> Falsch

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set Target = Target.Range("A1")
Target = Not CBool(Target.Value)
Cancel = True
End Sub
Möchtest Du dieses Sonderverhalten auf einem bestimmte Bereich begrenzen, setze eine Prüfung (hier auf B1:B10 begrenzt)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set Target = Target.Range("A1")
If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
Target = Not CBool(Target.Value)
Cancel = True
End If
End Sub
VG
Yal
Anzeige
AW: Makro Sortierung mit Kontrollkästchen
21.12.2021 17:17:07
Hakan
Hi
danke für diesen Vorschlag.
Ich würd zwar gern verstehen, warum die Sortierung bei der Aufzeichnung als Makro sich anders verhält als bei der manuellen Sortierung...ist doch strange !?
Aber dein Vorschlag ist super! Auch einfach zu bedienen...doppelklick ist zwar ein klick mehr, man kann aber die ganze zelle anklicken und ich hab weniger gefrickel beim einsetzen der kästchen...hab jetzt zwar schon einhundert davon gesetzt, aber daran solls nicht scheitern :D
ich werde das umsetzen, gefällt mir gut, danke!! und ich halte mich an modell-view-controller :)
Noch eine frage dazu
Ich habe noch eine Frage zur Range, hier: If Not Intersect(Target, Range("A1:A50"))
Es gibt jedoch nicht nur eine Spalte sondern insgesamt 4 Spalten (Nebenkosten, die sich viermal im Jahr wiederholen können)
Ich müsste also 4 Ranges angeben. A3:A50, F3:F50, H3:50 und J3:J50
Kann ich die Funktion auf diese Bereiche eingrenzen? Wie wäre dafür die Syntax?
Herzlichen Dank Yal
Anzeige
AW: Makro Sortierung mit Kontrollkästchen
21.12.2021 17:55:14
Yal
Hallo Hakan,
So:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set Target = Target.Range("A1")
If (Not Intersect(Target, Range("A3:A50")) Is Nothing) Or _
(Not Intersect(Target, Range("F3:F50")) Is Nothing) Or _
(Not Intersect(Target, Range("H3:H50")) Is Nothing) Or _
(Not Intersect(Target, Range("J3:J50")) Is Nothing) Then
Target = Not CBool(Target)
Cancel = True
End If
End Sub
Dass die Checkbox mal mitsortiert, mal nicht, ist auch von Microsoft bekannt:
https://answers.microsoft.com/en-us/msoffice/forum/all/checkbox-linked-cells-not-sorting-properly/8dc9afc1-d83b-402c-8f35-615e8c8f56e0
Aber deren Workaround bekomme ich nicht hin.
VG
Yal
Anzeige
AW: Makro Sortierung mit Kontrollkästchen
21.12.2021 20:39:20
Hakan
Perfekt. Hat super geklappt und den Leuten gefällts.
Danke dir ganz herzlich
Löschen alle Checkboxes
21.12.2021 18:00:17
Yal
Hallo Hakan,
unter der Prämisse, dass der Name der Checkboxen "Check" beinhaltet:

Sub CheckBox_löschen()
Dim S As Shape
With ActiveWorkbook.Worksheets("Tabelle1")
For Each S In .Shapes
If InStr(1, S.Name, "check", vbTextCompare) Then .Shapes(S.Name).Delete
Next
End With
End Sub
VG
Yal
AW: Löschen alle Checkboxes
21.12.2021 20:40:19
Hakan
zu spät, hab mir schon den wolf geklickt.
egal, danke trotzdem!
AW: True/False mit Doubleclick
21.12.2021 22:39:33
GerdL
Moin,
das reicht.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = Not Intersect(Target, Range("A3:A50,F3:F50,H3:H50,J3:J50")) Is Nothing
If Cancel Then Target = Not CBool(Target.Value)
End Sub
Gruß Gerd
Anzeige
AW: True/False mit Doubleclick
21.12.2021 23:18:37
Hakan
Ahh mit Komma! Hatte es mit Semikolon versucht, das hat ihm nicht geschmeckt.
Danke, ist noch etwas cleaner :)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige