ich könnte ein bisschen Unterstützung oder einen cleveren Hinweis von einem Fachmann gebrauchen.
Ich habe einen Produktkatalog auf Excel Vba (Userforms) gebastelt, über den Bestellungen gemacht werden können. Wenn man sich seine Artikel zusammengestellt hat bekommt man ein Excel Sheet mit einer Bestellübersicht über die ausgewählten Artikel (Drei Spalten: Artikel; Menge; Preis). Da es sich häufig bei den Bestellungen über ein Vielzahl von Artikeln handelt, habe ich neben den drei Spalten noch eine weitere Spalte "löschen" eingefügt. In dieser Spalte habe ich pro Zeile ein Kontrollkästchen ("löschen") eingefügt. Wenn. Nachdem der User ausgewählt hat, welche Artikel gelöscht werden sollen, wird über einen Commandbutton eine Schleife gestartet, die die entsprechenden Zellen löscht und die Tabelle neu sortiert.
Soviel zum Aufbau meiner Datei.
Da der Katalog an sehr viele Leute versendet wird, möchte ich, dass dieser optisch gut aussieht. Wenn sich ein User bspw. nur einen Artikel bestellt, bekommt er eine Abrechnung mit einem Artikel, jedoch befinden sich in der 4. Spalte in jeder Zeile die Kontrollkästchen "Löschen". Gibt es eine Möglichkeit, die Steuerelemente unsichtbar zu machen, wenn sich kein Wert in den ersten beiden Spalten befindet? Des Weiteren wäre es sehr schön, wenn die Schleife "löschen" durchgelaufen ist, die zuvor aktivierten Kontrollkästchen wieder deaktiviert werden!
Ich habe eine exemplarische Beispieldatei hochgeladen :21:
Ich würd mich freuen wenn jemand einen Lösungsansatz hat!
wenn Du eine Userform einsetzt, dann nutze sie auch zum Löschen.
Im Grunde ist es ähnlich eines Kassensystems aufbaubar. Der User wählt Artikel und Menge aus und diese werden in einer Listbox aufgeführt. Die Listbox kann mit Kontrollkästchen versehen sein ListStyle = Option Hier kann am Ende in der Listbox angeklickt werden, was nicht erwünscht ist. Am Ende wenn alles Ausgewählt wurde, kann es dann aus der Listbox in die Tabelle übertragen werden.
Für Dein Beispiel kann ich erst einmal folgendes anbieten: -Das Deaktivieren ist leicht umsetzbar, da Du die Kontrollkästchen mit einer Zelle Verknüpft hast. Du musst den Wert dieser Zelle einfach auf False stellen.
Im Code von Dir so:
For x = 2 To 11
If Cells(x, 1) = True Then Cells(x, 2) = "" Cells(x, 3) = "" Cells(x, 1) = False End If
Next x
Das Ausblenden kann an der gleichen Stelle zwar auch passieren, aber wann und unter welchen Voraussetzungen soll wieder eingeblendet werden?
vielen Dank für die schnelle Antwort. Manchmal ist die Lösung so nah und man steht einfach auf dem Schlauch . Auf die Idee in der Schleife das Kontrollkästchen wieder auf false zu setzen bin ich nicht gekommen. Vielen Dank dafür, klappt selbstverständlich!
Der erste Vorschlag mit der Userform ist leider nicht anwendbar, dafür habe ich den Katalog den ich gerade erstelle auch nicht gut genug für beschrieben. Es handelt sich um einen sehr großen Katalog mit weitaus mehr als 200 Artikeln. Der User bewegt sich ausschließlich über Userforms, die miteinander verknüpft sind. Pro Userform wird der User wahrscheinlich höchstens 1-2 Artikel bestellen. Nach Abschluss der Kalkulation werden alle Userforms geschlossen und alle ausgewählten Artikel werden in das Tabellenblatt zur Endkontrolle übertragen. Und an dieser Stelle sieht der User alles was er ausgewählt hat, Artikel, Menge, Preis. Dieses Tabellenblatt wird über einen Commandbutton extrahiert und an die Buchhaltung gesendet zur Endabrechnung.
Zu deiner Frage. Der User sieht, wenn er 6 Artikel ausgewählt, hat eine Liste mit den 6 gewünschten Artikeln. Neben jedem der Artikel hätte ich gerne das Kontrollkästchen zum löschen, also anstatt 10 sichtbaren 6 sichtbare Kontrollkästchen und 4 nicht sichtbare. Wenn er dann einen Artikel löscht, sind nur noch 5 Kontrollkästchen sichtbar. Wenn er erneut den Katalog öffnet und einen weiteren Artikel hinzufügt, also insgesamt 7 auswählt, sollen auch 7 Kontrollkästchen sichtbar sein.
Ich bin leider blutiger Anfänger auf dem Gebiet, alle VBA Kenntnisse die ich habe stammen aus diesem oder Herbers Excel Forum bzw. Youtube.
ich würde am Ende halt alles in der Lisbox auflisten und der User kann dann dort auswählen was er löschen möchte. Danach in die Tabelle und für die Buchhaltung oder was auch immer.
Trotzdem hier ein Weg, wie Du die Checkboxen ausblenden kannst:
Code:
Sub Chekboxen_ausblenden() Dim chkElement As CheckBox For Each chkElement In ActiveSheet.CheckBoxes If Range(chkElement.LinkedCell).Offset(0, 1) = "" Then chkElement.Visible = False End If Next End Sub
Das rufst Du am Ende Deines bisherigen Code
vor End Sub so auf:
Code:
Call Chekboxen_ausblenden
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28 • Travis5002
Vielleicht hab ich Dich misverstanden, aber die checkboxes haben immer eine eigenschaft 'Topleftcell', obwohl die Grösze nicht übereinstimmen kann mit die der Zelle. In der BeispielDatei waren alle Checboxes im identische Spalte 'angehängt'.
die Boxen überlappen teilweise andere Zellen, so dass zwei Boxen die gleiche TopLeftCell Adresse haben. Das hatte ich vorher geprüft und um sicher zu gehen, habe ich meine Variante genommen.
Das sind die TopLeftCell Adressen in der eingestellten Datei:
sinnvollerweise positioniert man die Boxen mit einem Makro etwa 1 Einheit innerhalb der Zelle wenn man die linke Ecke verwenden will - womit dann topleft... funktionieren sollte. Nach Möglichkeit noch Blattschutz setzen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)