Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1888to1892
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

Dynamisch Checkboxen in Zeilen erzeugen

Dynamisch Checkboxen in Zeilen erzeugen
28.06.2022 11:54:52
Thomas
Hallo,
ich würde gerne in Zeilen Dynamisch Checkboxen auf einem Tabellenblatt einlegen, das Tabellenblatt wird bei einem Change Event neu aufgebaut und kann unterschiedlich viele Zeilen haben, die Spalten sind immer gleich und die Checkbox sollte in Spalte AE und AF erzeigt werden, das erstemal in Reihe 5 und dann immer 4 Reihen weiter und das letzte mal in der vorletzten genutzen Reihe, eine Text braucht die Checkbox nicht.
Im nächsten Step soll dann der Checkbox Status natürlich irgendwann mal abgefragt werden.
Da die Checkbox ja angesprochen werden muss, brauch sie ja eine Bezeichnung, vielleicht könnte man dazu einen Präfix z.b. (chk) und den Wert aus der Spalte 1 und der jeweiligen Zeile (also 5,9 usw.) nehmen.
Wie könnte ich das hinbekommen das die Checkboxen in AE und AF erstellt werden.
Danke

29
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
28.06.2022 12:31:22
Zwenn
Hallo Thomas,
für so eine Anforderung sollten nicht jede Menge Checkboxen verwendet werden. Es ist wesentlich einfacher das Worksheet_BeforeDoubleClick()-Event dafür zu nehmen. Folgenden Code in das Codemodul der Tabelle verwenden und auf Deinen gewünschten Bereich anpassen. Der Code ist von Daniel und funktioniert sehr gut.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Quelle: http://www.office-loesung.de/ftopic616616_0_0_asc.php
'Autor: slowboarder
If Target.Column = 3 Then                       '--- nur in Spalte C
If Target.Row > 3 Then                      '--- nur in den Daten
Cancel = True                           '--- Spalte A ab Zeile 6 für Eingaben sperren
If Target.Offset(0, 9).Value  "" Then '--- nur wenn in Spalte L ein Wert steht
If Target.Value = "X" Then
Target.Value = ""
Else
If Target.Offset(0, 7).Value = "" _
And Target.Offset(0, 8).Value = "" Then
Target.Value = "X"
End If
End If
End If
End If
End If
End Sub
Viele Grüße,
Zwenn
Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
28.06.2022 16:56:55
Thomas
Hi Zwenn,
vielen Dank dafür, das gefällt mir zwar grad optisch noch nicht so wie eine Checkbox, tut aber grundsätzlich was es soll, ich werd mich mal ein bisschen damit auseinandersetzen.
Danke für den Tip
AW: Dynamisch Checkboxen in Zeilen erzeugen
28.06.2022 16:28:03
Beverly
Hi Thomas,
was sollen die CheckBoxen denn machen? Müssen die CheckBoxen immer in allen Zeilen vorhanden sein oder reicht es, wenn sie in der gerade aktiven Zeile vorhanden sind?
Bis später
Karin

AW: Dynamisch Checkboxen in Zeilen erzeugen
28.06.2022 16:59:29
Thomas
Hallo Karin, die Checkboxen sollten immer an jeder 4 Zeile in den Spalte AE und AF vorhanden sein, so das man darüber quasi einen Status True/False setzen kann, denn man dann abfragen und weiterverarbeiten kann.
Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
28.06.2022 23:02:49
Beverly
Hi Thomas,
schau dir mal das angehängte Beispiel an, ob das eine Möglichkeit für dich wäre: es wird eine einzige CheckBox (Formular) verwendet und jeweils in die angeklickte Zelle gesetzt, wenn sich diese im Bereich der Spalten E:F ab Zeile 5 in jeder 4. Zeile befindet. Bei Aktivierung wird "Ja" und bei Deaktivierung "Nein" in die betreffende Zelle geschrieben.
https://www.herber.de/bbs/user/153829.xlsm
Bis später
Karin

AW: Dynamisch Checkboxen in Zeilen erzeugen
29.06.2022 10:09:52
Thomas
Hallo Karin,
erstmal vielen Dank dafür, das ist eine wirklich interessante Lösung, da wäre ich im leben nicht drauf gekommen, mir wäre es zwar immer noch lieber(finds optisch ansprechender) wenn in jeder 4 Zeile eine Checkbox stehen würde, aber auch hiermit kann ich leben.
Hab dazu aber ein paar Verständnis fragen,
Wieso teilst du das in zwei Module auf? Gibts dafür einen besonderen Grund? bzw. was macht das Makro in Modul2?
Im Arbeitsblatt hast du dann eine interessante Variante um die letzte Zeile zu ermitteln, das hab ich so noch nie gesehen, wieso machst du das auf diese weisse und was ist der unterschied/vorteil z.b. hier gegen?

letztezeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Was genau macht das?

If Not Intersect(Target, rngBereich) Is Nothing Then
Vielen Dank schonmal für die Unterstützung
Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
29.06.2022 14:09:44
Beverly
Hi Thomas,
wenn du sehr viele Steuerelemente im Tabellenblatt hast, mag das optisch zwar "schöner" aussehen, aber wenn dann z.B. Zeilen ausgeblendet werden, verschieben sich die Steuerelemente häufig, was natürlich Probleme mit sich bringt.
zur Ermittlung der Zeile der letzten belegten Zelle: schreibe mal in die letzte Zelle der Spalte A etwas und teste dann deinen und meinen Code. Mein Code stammt zwar noch aus der Zeit, als ein Arbeitsblatt wesentlich weniger Zeilen hatte und es schon mal vorkommen konnte, dass alle Zellen einer Spalte belegt waren (was heutzutage eher weniger wahrscheinlich ist), aber deshalb ist der Code ja nicht falsch und gibt das richtige Ergebnis aus - deshalb benutze ich ihn nach wie vor.
zu Intersect(.....): auf diese Weise kann ganz einfach geprüft werden, ob sich die Targetzelle im festgelegten Bereich befindet, damit die If-Verzweigung ausgeführt wird.
Modul2 kann gelöscht werden - ich hatte nur mit dem Makrorekorder aufgezeichnet, wie man Text zentriert und dann vergessen, das Modul zu entfernen.
Bis später
Karin

Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
29.06.2022 10:34:01
Thomas
Hi, muss dann nochmal fragen, hab das mal bei mir so umgesetzt, bekomme aber dann einen Fehler, weil das Objekt nicht gefunden wird


Muss ich das Formular Element erstellen und benennen? Konnte das in deiner Beispielmappe nicht finden.
Danke
AW: Dynamisch Checkboxen in Zeilen erzeugen
29.06.2022 14:15:07
Beverly
Hi Thomas,
die CheckBox (Formularsteuerelement) habe ich von Hand erstellt, ihr den Namen "chkBox" gegeben und ihre Größe entsprechend angepasst.
Bis später
Karin

Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
29.06.2022 14:48:21
Thomas
Hi Karin,
vielen Dank für die erklärungen.
Ich glaub ich bin zu blöd um die Namens eingenschaft des Formularsteuerelements zu finden, für das ActiveX finde ich es, beim Formularsteuerelement find ich keine.....
AW: Dynamisch Checkboxen in Zeilen erzeugen
29.06.2022 15:06:02
Beverly
Hi Thomas,
einfach das Steuerelement anklicken, bzw. nach dem Erstellen ist es noch aktiviert, und dann im Namen-Fenster den Namen eintragen anstelle "Kontrollkästchen 1" (oder wie auch immer es automatisch benannt wird).
Bis später
Karin

AW: Dynamisch Checkboxen in Zeilen erzeugen
30.06.2022 10:36:15
Thomas
Ich glaub ich bin zu blöd dafür, ich finde kein Namen-Feld....
Userbild
Userbild
Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
30.06.2022 11:03:21
Beverly
Userbild
Bis später
Karin

AW: Dynamisch Checkboxen in Zeilen erzeugen
30.06.2022 12:02:39
Thomas
Oh man, manchmal bin ich auch blind.....
Allerdings klappt es dann trotzdem nicht richtig,selbst wenn die Checkbox = True ist, wird nie "Ja" geschrieben, es bleibt immer bei nein.........
Aber mit der selbst erstellten Checkbox kommt auch der Fehler mit der Formatierung nicht mehr....
AW: Dynamisch Checkboxen in Zeilen erzeugen
30.06.2022 12:16:44
Thomas
Ich versteh zwar nicht wieso, aber wenn ich deine Checkbox nehme, dann klappt es..... bei meiner eigenen wird das Modul nicht aufgerufen.....
Mir ist aber dann noch eine anforderung ein/aufgefallen, in einer Zeile kann die Checkbox nur in einer Spalte sein, also wenn in "E5" schon eine gesetzt ist, kann keine mehr in "F5" gesetzt werden, wie kann man das noch im Coe abbilden?
Danke
Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
30.06.2022 14:15:22
Beverly
Du musst das Makro noch der CheckBox zuweisen, andernfalls kann sie auch nichts machen - ich nahm an, das sei logisch. ;-)
Zu deiner anderen Frage: ändere den Code wie folgt

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lngLetzte As Long
Dim rngBereich As Range
Dim blnNicht As Boolean
lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Set rngBereich = Range(Cells(5, 5), Cells(lngLetzte, 6))
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, rngBereich) Is Nothing Then
If Target.Address(0, 0) = "F5" Then
If Target.Offset(0, -1)  "" Then blnNicht = True
End If
If Target.Row Mod 4 = 1 Then
If blnNicht = False Then
With ActiveSheet.Shapes("chkBox")
.Top = Target.Top
.Left = Target.Left
Target.HorizontalAlignment = xlCenter
If Target.Cells(1) = "Ja" Then
.OLEFormat.Object.Value = 1
Else
Target = "Nein"
.OLEFormat.Object.Value = -4146
End If
End With
End If
End If
End If
End Sub
Bis später
Karin

Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
01.07.2022 06:22:35
Thomas
Hallo Karin,
vielen Dank,
hast recht eigentlich ist es logisch:-)
Das mit der prüfung das nicht zweimal die Checkbox erscheint klappt bei mir noch nicht wirklich, entweder hab ich es falsch umgesetzt oder mich falsch ausgedrückt, wenn in Colum 31 oder 32 schon ein Ja oder Nein steht, dann darf das in dem jeweils anderen nicht mehr möglich sein.
Was auch nicht immer klappt, das die Checkbox nur in 31 oder 32 erscheint wenn in 30 schon ein Wert steht.
Der von mir eingefügt Code sieht aktuell so aus.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lngLetzte As Long
Dim rngBereich As Range
Dim blnNicht As Boolean
lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 30)), Cells(Rows.Count, 30).End(xlUp).Row, Rows.Count)
Set rngBereich = Range(Cells(5, 31), Cells(lngLetzte, 32))
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, rngBereich) Is Nothing Then
If Target.Address(0, 0) = "AF5" Then
If Target.Offset(0, -1)  "" Then blnNicht = True
End If
If Target.Row Mod 4 = 1 Then
If blnNicht = False Then
ActiveSheet.Unprotect "Petz"
With ActiveSheet.Shapes("chkBox")
.Top = Target.Top
.Left = Target.Left
Target.HorizontalAlignment = xlCenter
If Target.Cells(1) = "Ja" Then
.OLEFormat.Object.Value = 1
Else
Target = "Nein"
.OLEFormat.Object.Value = -4146
End If
End With
End If
End If
End If
End Sub
Danke
MFG
Thomas
Anzeige
AW: Dynamisch Checkboxen in Zeilen erzeugen
01.07.2022 10:55:39
Beverly
Hi Thomas,
du hast geschrieben:
  • also wenn in "E5" schon eine gesetzt ist, kann keine mehr in "F5" gesetzt werden

  • Folglich bin ich logischerweise davon ausgegangen, dass dies nur die Zellen E5 und F5 betrifft. Jetzt klingt das aber so, dass das in ALLEN Zellen der betreffenden Zeilen der Fall sein soll? Und wie ist das im umgekehrten Fall, also wenn in Spalte F bereits etwas steht - darf dann in Spalte E nichts gesetzt werden?
    Du musst dich schon präzise ausdrücken was du erreichen willst, nur DU kannst das schließlich wissen.
    Bis später
    Karin

    AW: Dynamisch Checkboxen in Zeilen erzeugen
    01.07.2022 11:59:25
    Thomas
    Hallo Karin,
    hatte ja geschrieben das ich mich falsch ausgedrückt hatte.
    Korrekt wäre gewesen, wenn in Spalte 31 in der entsprechenden Zeile schon etwas steht, dann darf in Spalte 32 nichts mehr eingetragen werden können und auch umgekehrt nicht.
    Vorraussetzung das überhaupt in Spalte 31 oder 32 etwas eingetragen werden darf ist das in Spalte 30 in der entsprechenden Zeile etwas steht.
    Sorry für die Verwirrung.
    AW: Dynamisch Checkboxen in Zeilen erzeugen
    01.07.2022 14:45:57
    Beverly
    Hi Thomas,
    ich persönlich fände das kontraproduktiv, wenn ich eine Auswahl getroffen habe, dass ich diese Auswahl dann NIE mehr ändern darf - denn genau das bedeutet deine Vorgabe, dass die andere Spalte tabu ist, wenn in einer der beiden Spalten bereits eine Auswahl getroffen wurde. Wäre es nicht besser, eine Abfrage einzubauen, ob die Auswahl der Spalte geändert werden soll, sobald in einer der beiden Spalten etwas steht und man in die andere Spalte klickt? Und wenn diese Abfrage mit Ja beantwortet wird, wird die Auswahl in der anderen Spalte direkt gelöscht, sodass eine neue Auswahl in der neuen Spalte getroffen werden kann?
    Bis später
    Karin

    AW: Dynamisch Checkboxen in Zeilen erzeugen
    01.07.2022 15:09:47
    Thomas
    Hallo Karin,
    dann habe ich mich wohl wieder falsch ausgedrückt :-(
    Wenn z.b. in Zelle AE5 etwas eingetragen ist, dann soll es nicht mehr möglich sein etwas in AF5 einzutragen, in AF9 usw. aber schon.
    Wenn dann der Wert in AE5 wieder gelöscht wurde, dann kann auch in AF5 was eingetragen werden usw.
    AW: Dynamisch Checkboxen in Zeilen erzeugen
    01.07.2022 15:40:40
    Beverly
    Hi Thomas,
    das ist mir schon klar, dass das immer nur jeweils das Zellenpaar IN EINER Zeile betrifft und nicht die Zellenpaare in mehreren Zeilen gleichzeitig.
    Ich kann dir selbstverständlich den Code so ändern wie du es beschrieben hast - aber ehe ich dann wieder alles ummodeln muss, gebe ich dir folgendes nocheinmal zu bedenken:
    Du schreibst: "Wenn dann der Wert in AE5 wieder gelöscht wurde" - wer löscht diesen Wert? Stelle dir vor, du hast z.B. in AE5 etwas eignetragen und plötzlich fällt dir ein: oje, das war ja die falsche Spalte, ich wollte eigentlich in AF5 etwas eintragen - was nun? Das ist die Frage, die sich mir stellt, wenn du keine nachträgliche Änderung der Auswahl für die Spalte zulässt, was aber nach deiner Beschreibung genau der Fall ist. Deshalb mein Vorschlag mit der Abfrage, ob die Spalte gewechselt werden darf.
    Bis später
    Karin

    AW: Dynamisch Checkboxen in Zeilen erzeugen
    02.07.2022 06:41:51
    Thomas
    Hallo Karin, ich würde den Wer in AE5 zum Beispiel aus dem Tabellenblatt löschen, weil ich z.b gemerkt hab das ich ihn da nicht wollte.
    Vorraussetzung ist immer das Cells(lngRow,30) "" ist, dann darf in Cells(lngRow,31) und Cells(lngRow,32) etwas eingetragen werden, wenn in 31 dann was steht, darf in 32 nichts eingetragen werden, wenn in 32 was steht darf in 31 nichts stehen und wenn 30 der Wert gelöscht(nicht geändert) wird dann sollen 31 und 32 auch geleert werden.
    MFG
    Thomas
    AW: Dynamisch Checkboxen in Zeilen erzeugen
    02.07.2022 10:39:47
    Beverly
    Hi Thomas,
    Zitat: "...in AE5 zum Beispiel aus dem Tabellenblatt löschen, weil ich z.b gemerkt hab das ich ihn da nicht wollte"
    Es ist zwar völlig sinnfrei, dass man etwas von Hand löschen muss, wenn man sowieso VBA benutzt und dies auch per VBA lösbar ist, aber - des Menschen Wille ist sein (umständliches) Himmelreich... ;-)
    https://www.herber.de/bbs/user/153929.xlsm
    Bis später
    Karin

    AW: Dynamisch Checkboxen in Zeilen erzeugen
    03.07.2022 07:02:00
    Thomas
    Hi Karin,
    aber woher soll VBA Wissen das mir aufgefallen ist das ich einen falschen Wert eingetragen habe? Aber jetzt scheint alles genau so zu funktionieren wie ich es mir vorgestellt hatte:-)
    Vielen Dank für deine geduldige Hilfe.
    MFG
    AW: Dynamisch Checkboxen in Zeilen erzeugen
    03.07.2022 10:03:02
    Beverly
    Hi Thomas,
    ich habe nicht geschrieben, dass VBA das wissen soll, sondern dass der BENUTZER die Möglichkeit haben sollte, die Spaltenauswahl zu korrigieren, und das OHNE von Hand den Zellinhalt löschen zu müssen - das ist ein himmelweiter Unterschied...
    Bis später
    Karin

    AW: Dynamisch Checkboxen in Zeilen erzeugen
    04.07.2022 05:28:06
    Thomas
    Hallo Karin,
    ah ok, jetzt hab ich verstanden, da hast du natürlich recht, vielleicht versuch ich mich später mal daran:-)
    Vielen Dank für deine geduldige Hilfe
    MFG
    AW: Dynamisch Checkboxen in Zeilen erzeugen
    30.06.2022 10:58:25
    Thomas
    Hab die Checkbox jetzt einfach aus deiner Datei rauskopiert und das funktioniert, allerdings bekomme ich noch bei diesem Teil einen Fehler
    
    Target.HorizontalAlignment = xlCenter
    
    Laufzeitfehler 1004 , Eigenschaft des Range Objekts kann nicht festgelegt werden
    Der angepasste Code sieht jetzt so aus
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim lngLetzte As Long
    Dim rngBereich As Range
    lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
    Set rngBereich = Range(Cells(5, 30), Cells(lngLetzte, 32))
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, rngBereich) Is Nothing Then
    If Target.Row Mod 4 = 1 Then
    With ActiveSheet.Shapes("chkBox")
    .Top = Target.Top
    .Left = Target.Left
    'Target.HorizontalAlignment = xlCenter
    If Target.Cells(1) = "Ja" Then
    .OLEFormat.Object.Value = 1
    Else
    Target = "Nein"
    .OLEFormat.Object.Value = -4146
    End If
    End With
    End If
    End If
    End Sub
    

    AW: Dynamisch Checkboxen in Zeilen erzeugen
    30.06.2022 11:27:59
    Beverly
    Tritt der Fehler auch in meiner hochgeladenen Mappe auf? Bei mir jedenfalls nicht und wenn ich eine neue Mappe erstelle, tritt er dort ebenfalls nicht auf. Ich verwende Excel2016.
    Der einfachste Weg: lösche diese Codezeile und formatiere die betreffenden Spalten auf Text-Ausrichtung Zentriert.
    Oder zeichne den Code für das Zentrieren einer Zelle mit dem Makrorekorder auf und vergleiche dann, ob es einen Unterschied in dieser Codezeile gibt.
    Bis später
    Karin

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige