Registriert seit: 07.04.2015
Version(en): 2016
Test.xlsm (Größe: 21,3 KB / Downloads: 7)
Hallo, ich suche Hilfe bei folgendem Problem: Eine Tabelle mit x Kontrollkästchen (Im Beispiel sind es z.B. 29) soll z.B. eine Tabelle für fehlende oder vorhandene Teile darstellen. In dieser Tabelle ist die hellblaue Zeile (0-20) und Spalte (0-9) ein Index für die Nummer des jeweiligen Kontrollkästchens. Das Kontrollkästchen im Feld "C7" hat also die Nummer "14" Die Anzahl der Kontrollkästchen variiert von Tabellenblatt zu Tabellenblatt. Per VB-Makro wird die Gesamtzahl, die Anzahl der vorhandenen und die Anzahl der fehlenden Teile per VB ermittelt (Zelle E15-E17). Ab der Zelle "B23" wird per VB für jedes Kontrollkästchen (Teil) geschrieben, ob es aktiv (vorhanden) ("1") oder passiv (nicht vorhanden) ("0") ist. Die Reihenfolge dafür geht jedoch von links nach rechts und von oben nach unten, also nicht der Reihe nach - Teil01 bis Teil29 Bis hier gibt es noch keine Probleme. Nun soll aber zusätzlich noch eine fortlaufende Liste der Nummern aller fehlenden Teile (passiven Kontrollkästchen) ausgegeben werden. Im Beispiel habe ich dies zum Verständnis mal "rot" mit Hand geschrieben. Ich finde aber keinen Weg für ein vernünftiges VB-script. Vielleicht kann mir hier jemand helfen. Vielen Dank schon im Voraus Bödefeld
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Bödefeld,
in CB.ShapeRange.Name hast Du die Nummer des Kontrollkästchens. Allerdings habe ich in Deiner Datei in C7 das Kontrollkästchen 30 und nicht 14 ?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 07.04.2015
Version(en): 2016
Hallo André, Dank für Deine schnelle Antwort, aber Du hast wohl das Problem noch nicht richtig verstanden. Die Kästchen stellen hier in diesem Beispiel eine Matrix mit 19 Positionen (Teilen) dar, die in drei Spalten und in neun Zeilen angeordnet ist. Es sind die Positionen der Kästchen gemeint, die durch die hellblaue Legende (Zeile 2 - waagerecht und Spalte A - senkrecht) bestimmt werden. Das Kästchen im Feld "C8" steht in der 2. Spalte und in der 5. Zeile, also 10+5= Teil Nr.15 Das Kästchen im Feld "D12" steht in der 3. Spalte und in der 9. Zeile, also 20+9= Teil Nr.29 Diese Teil-Nummern aller passiven Kästchen sollen waagerecht nebeneinander aufgelistet werden.
Gruß Bödefeld
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
07.04.2015, 19:53
(Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2015, 19:55 von schauan.)
Hallöchen,
sind die Kästchen genau über den Zellen ausgerichtet? Da könnte man mit der Eigenschaft TopLeftCell arbeiten. ... Debug.Print CB.TopLeftCell.Address ...
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, also, die Kontrollkästchen sind wohl nicht alle mit der Ecke genau über der darunter liegenden Zelle positioniert. Ich habe hier mal ein Makro, was sowohl die Position genau einhält als auch Namen vergibt, sodass man nicht mehr unbedingt die Position benötigen würde.. Code: Sub Add_Checkboxen() 'Variablendeklarationen 'Checkbox Dim cboShape As CheckBox 'Integer Dim iCnt1%, iCnt2% 'Schleife ueber alle Zeilen For iCnt1 = 0 To 9 'Schleife ueber alle Spalten For iCnt2 = 0 To 2 'Checkbox einfuegen und auf linke obere Ecke der Zelle positionieren Set cboShape = ActiveSheet.CheckBoxes.Add(Cells(iCnt1 + 3, iCnt2 + 2).Left, Cells(iCnt1 + 3, iCnt2 + 2).Top, 24, 10) 'Name der Checkbox anhand Schleifenzaehlern festlegen cboShape.Name = "cbo_" & iCnt1 + iCnt2 * 10 'Ende Schleife ueber alle Spalten Next 'Ende Schleife ueber alle Zeilen Next End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo, unter der Voraussetzung, dass die Kontrollkästchen nicht in andere Zellen ragen, könnte es so gehen: Code: Public Sub Kontrollkästchen_Check() Dim CB_active As Integer Dim CB_passive As Integer Dim CB_all As Integer Dim CB As CheckBox Dim Beginn_liste_Spalte As Integer Dim Beginn_liste_Zeile As Integer Dim spalte As Integer, spalte2 As Integer Dim zeile As Integer '--> Beginn der Liste der leeren Boxen festlegen Beginn_liste_Spalte = 1 Beginn_liste_Zeile = 23 spalte = Beginn_liste_Spalte + 1 spalte2 = Beginn_liste_Spalte + 1 Rows(24).ClearContents Rows(23).ClearContents '--> Anzahl Boxen berechnen For Each CB In ActiveSheet.CheckBoxes 'CB.Select CB_all = CB_all + 1 If CB.Value = 1 Then CB_active = CB_active + 1 Cells(23, spalte) = 1 Else CB_passive = CB_passive + 1 Cells(23, spalte) = 0 End If
If CB.Value <> 1 Then CB.Select Cells(24, spalte2) = CB.TopLeftCell.Row + (CB.TopLeftCell.Column - 1) * 10 spalte2 = spalte2 + 1 End If spalte = spalte + 1 Next ActiveSheet.Range("E" & 15).Value = CB_all ActiveSheet.Range("E" & 16).Value = CB_active ActiveSheet.Range("E" & 17).Value = CB_passive
End Sub
Gruß Atilla
Registriert seit: 07.04.2015
Version(en): 2016
08.04.2015, 10:22
(Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2015, 17:10 von Rabe.
Bearbeitungsgrund: Zitat korrigiert. Es reicht, die relevanten Teile zu zitieren!
)
(07.04.2015, 21:49)atilla schrieb: unter der Voraussetzung, dass die Kontrollkästchen nicht in andere Zellen ragen, könnte es so gehen: Hallo zusammen, Danke schauan und attila für eure Hilfe. :18: Ich kann eure Vorschläge aber leider erst am Wochenende ausprobieren (bin selbständig und muss Geld verdienen). Zu euren Fragen - die Kästchen habe ich versucht, per d&d auf die linke Seite des betreffenden Feldes zu ziehen. Im Feld selbst steht auf der rechten Seite noch eine Zahl, die angibt, wie oft das betreffende Teil vorhanden ist. Dies spielt aber für mein Problem hier keine Rolle, deshalb habe ich sie wegen der Übersichtlichkeit herausgelöscht. Ich habe zur besseren Erklärung die Testdatei noch mit Erklärungen betreffs des Wertes jedes Kästchens versehen.
Test2.xlsm (Größe: 22,42 KB / Downloads: 2)
Wichtig ist auch: Das von mir verwendete Script zum Bestimmen der passiven Kästchen sucht von links oben nach rechts unten. Dadurch sucht es aber nicht in der Reihenfolge der Werte der Kästchen (ist blöde zu beschreiben!). Also angenommen, die 5 Kästchen der oberen zwei Zeilen wären passiv, dann würden die gefundenen Werte in der Reihenfolge lauten: (ganz oben links- das Feld mit dem Wert 00 hat kein Kästchen, denn Teil00 gibt es nicht) 10/20/01/11/21 Die Werte der passiven Kästchen sollten aber am Ende sortiert vorliegen, also: 01/10/11/20/21 Am Ende werde ich die gefundenen Werte der passiven Kästchen noch formatieren, also in eine Matrix mit 10 Spalten und entsprechend vielen Zeilen schreiben, damit man eine übersichtliche Liste mit den Fehlteilen in die Hand bekommt. Hoffentlich habe ich das alles so erklärt, dass es verständlich ist. Ich bitte um Nachsicht, aber ich bin sowohl in VB, als auch hier im Forum noch ein Neuling. Ich melde mich wieder, sowie ich dazugekommen bin, eure Vorschläge auszuprobieren. Wenn das Script mal fertig ist, werde ich es hier posten. Vielleicht kann jemand außer mir damit etwas anfangen. Viele Grüße Bödefeld
Folgende(r) 1 Nutzer sagt Danke an Bödefeld für diesen Beitrag:1 Nutzer sagt Danke an Bödefeld für diesen Beitrag 28
• Rabe
Registriert seit: 07.04.2015
Version(en): 2016
09.04.2015, 10:42
(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2015, 14:44 von Rabe.
Bearbeitungsgrund: Zitat korrigiert. Es reicht, die relevanten Teile zu zitieren!
)
Hallo, es hat mir doch keine Ruhe gelassen, habe eure Vorschläge ausprobiert. Der letzte Vorschlag von Attila kommt der Sache schon näher, nur die ausgegebenen Werte stimmen noch nicht. Ich habe seinen Änderungsvorschlag hochgeladen:
Test3.xlsm (Größe: 22,32 KB / Downloads: 4)
Noch einmal zur Erklärung:Die linke obere Ecke der Tabelle beginnt immer an der gleichen Stelle. Sie ist nur von Tabellenblatt zu Tabellenblatt unterschiedlich breit. Die Kontrollkästchen der Tabelle stellen eine Gruppe von Teilen dar. Die Tabelle hat immer nur 10 Zeilen und entsprechend viele Spalten, abhängig davon, wie viele Teile zur Tabelle gehören. Neben der Kästchen-Gruppe befinden sich (hellblaue) Felder, waagerecht oberhalb (für die "Einer-Teilnummer" - 0 -> 9) und senkrecht links (für die "Zehner-Teilnummer" - 10 -> ...), mit denen man durch Addition beider Werte die Nr. eines bestimmten Teils ermitteln kann. Aktivieren wir mal alle Kästchen außer dem oberen unter der "10". Dieses Kästchen steht unter der "10" und rechts neben der "0" (in den hellblauen Feldern). Es würde sich also um das Teil mit der Nummer 10 (10+0) handeln. Ausgegeben wird aber "13". Das gleiche passiert auch bei den anderen Kästchen. Für Teil-Nr. "16" wird "18" ausgegeben, usw.. Die Differenz zwischen der ausgegebenen und der tatsächlichen Teil-Nummer ist also nicht bei allen Teilen gleich. Sonst hätte ich das Problem einfach durch Subtraktion von "3" gelöst. Außerdem passiert im Beispiel von Attila noch was komisches. Beim Anklicken (Deaktivieren) eines aktivierten Kästchens schaltet Excel in den Bearbeitungsmode des Kontrollkästchens um und legt um das betreffende Kästchen den Bearbeitungsrahmen. Da muss man jedes Mal mit ESC erst den Rahmen löschen. Dank noch einmal an alle, die mir bisher geholfen haben. Vielleicht bekommen wir das Problem doch noch in den Griff. Grüße Bödefeld (07.04.2015, 21:49)atilla schrieb: unter der Voraussetzung, dass die Kontrollkästchen nicht in andere Zellen ragen, könnte es so gehen:
Registriert seit: 14.04.2014
Version(en): 2003, 2007
09.04.2015, 12:12
(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2015, 12:28 von atilla.)
Hallo, leider kann man mit Deinen eingestellten Mappen nicht vernünftig testen, da die Kästchen immer über mehrere Zellen gehen. Wenn Du die Kästchen vernünftig in die Zellen legst, dazu kannst Du Andres Code nutzen, dann geht mein Code mit einer kleinen Anpassung: Code: Public Sub Kontrollkästchen_Check() Dim i As Long Dim CB_active As Integer Dim CB_passive As Integer Dim CB_all As Integer Dim CB As CheckBox Dim Beginn_liste_Spalte As Integer Dim Beginn_liste_Zeile As Integer Dim spalte As Integer, spalte2 As Integer Dim zeile As Integer Dim feld '--> Beginn der Liste der leeren Boxen festlegen Beginn_liste_Spalte = 1 Beginn_liste_Zeile = 23 spalte = Beginn_liste_Spalte + 1 spalte2 = Beginn_liste_Spalte + 1 Rows(24).ClearContents Rows(23).ClearContents '--> Anzahl Boxen berechnen For Each CB In ActiveSheet.CheckBoxes CB_all = CB_all + 1 If CB.Value = 1 Then CB_active = CB_active + 1 Cells(23, spalte) = 1 Else CB_passive = CB_passive + 1 Cells(23, spalte) = 0 End If
If CB.Value <> 1 Then Cells(24, spalte2) = Cells(CB.TopLeftCell.Row, 1) + Cells(2, CB.TopLeftCell.Column + 1) spalte2 = spalte2 + 1 End If spalte = spalte + 1 Next If spalte2 > 3 Then feld = Range(Cells(24, 2), Cells(24, spalte2 - 1)) For i = 1 To spalte2 - 2 Cells(24, i + 1) = Application.Small(feld, i) Next i End If ActiveSheet.Range("E" & 15).Value = CB_all
Nachtrag: Sortierung für Spalte 24 nachträglich eingearbeitet.Dass die Kästchen ausgewählt wurden, hatte ich zu Testzwecken eingebaut. Die Zeilen CB.Select mussten raus.
Gruß Atilla
Registriert seit: 07.04.2015
Version(en): 2016
Hallo Attila, das die Kästchen über mehrere Zellen gehen sollen, ist mir nicht klar. Verzeih bitte meine Ahnungslosigkeit, aber ich kann in meiner Tabelle nur ein Kästchen pro Zelle sehen. Du kannst das hier
Test.pdf (Größe: 69,32 KB / Downloads: 7)
leicht mal überprüfen. Oder was mache ich falsch? Grüße Bödefeld
|