Formularsteuerelemente verstecken wenn Zelle leer
#1
Guten Morgen Excel Freunde,

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!

VG

Travis5002


Angehängte Dateien
.xlsm   Delete Button.xlsm (Größe: 27,09 KB / Downloads: 15)
Antworten Top
#2
Hallo Travis,

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?
Gruß Atilla
Antworten Top
#3
Hallo Attila,

vielen Dank für die schnelle Antwort.
Manchmal ist die Lösung so nah und man steht einfach auf dem Schlauch Huh . 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. 

Vielen Dank schon mal im Voraus!

VG

Travis
Antworten Top
#4
Hallo Travis,

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:
  • Travis5002
Antworten Top
#5
Hallo Attila,

sauber, genau das habe ich gesucht.

Vielen Dank, hab es in meinen Originalkatalog eingebaut und musste nur geringfügig was ändern.

Thread kann geschlossen werden.

Noch einen schönes WE!
Antworten Top
#6
Du brauchst doch gar kein 'linkedcell'.

Code:
Sub M_snb()
   For Each it In Tabelle1.CheckBoxes
      it.Visible = it.TopLeftCell.Offset(, -1) <> ""
   Next
End Sub
Antworten Top
#7
Hallo snb,

richtig,

aber in der eingestellten Datei waren die Checkboxen so verteilt, dass sie nicht immer in einer Zelle lagen.
Deshalb habe ich LinkedCell genutzt.

Aber das Aus/Einblenden geht natürlich in einer Prozedur, so wie Du es gemacht hast.
Gruß Atilla
Antworten Top
#8
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'.
Antworten Top
#9
Hallo snb,

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:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDE
1 MengePreisLöschen? 
2FALSCH110 $D$11
3FALSCH29 $D$2
4FALSCH38 $D$2
5FALSCH47 $D$4
6WAHR65 $D$4
7FALSCH74 $D$5
8FALSCH83 $D$6
9FALSCH92 $D$7
10FALSCH101 $D$9
11FALSCH   $D$9
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß Atilla
Antworten Top
#10
Hallöchen,

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)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste