Excel VBA: Bestellliste mit Buttons?


28.02.2021, 20:35

Idee1: Durch Klick auf einen Button dessen Name übergeben. Name des Buttons wird bei der Erstellung festgelegt und enthält die Zeilennummer. -> Zeilennummer wird aus Button-Name extrahiert und übergibt die Arbeitszeile.

Problem: Wenn Zeilen aus der Liste gelöscht werden, müssen die Button-Namen aktualisiert werden, da sich die Zeilennnummern ändern

Idee2: Button-Name enthält Artikel-Nummer + Information, ob es sich um Oberposten oder Besteller-Posten handelt (Blau und Weiß). --> eindeutige Zuordnung, da jeder Artikel in der Liste nur ein einziges Mal auftauchen kann!

Problem: Wie übergibt man beim Klick auf die Grafik den Namen der Grafik an das Makro?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Schau mal meine Antwort bei dieser Frage

Excel Buttons schneller anklickbar machen?

Ich würde nur einmal Buttons einfügen und diese an die Zeile rücken die aktuell zur Bearbeitung ansteht. Dies vereinfacht manches deiner aktuellen Fragestellungen.


neo007bb851 
Beitragsersteller
 01.03.2021, 07:06

Das ist die Lösung! Danke sehr! Den Ansatz habe ich gestern nach meiner Frage auch gefunden und wird mir hiermit bestätigt. Da ich sowieso eine Zeilen-Markierungsfunktion haben möchte, heißt, wenn ich innerhalb der Tabelle eine Zeile anklicke, soll diese hervorgehoben werden, kann ich mit dieser Markierung auch einmalig Buttons für die hervorgehobene Zeile einfügen, eindeutig zuweisen und wieder löschen, sobald die Zeile wieder "entmarkiert" wird.

Danke!! Die Antworten bei der von Dir erwähnten Frage sehe ich mir auch noch mal an!

IchMalWiederXY  01.03.2021, 19:03
@neo007bb851

Gerne.
Die buttons füge ich im übrigen NICHT immer wieder spontan ein.
Sie sind auf dem Sheet vorhanden (einmalig aktiv positioniert) werden aber nach einem klick ZU zur gewünschten Zelle geführt ODER wenn es eine zeile OHNE gewünschte Funktion ist komplett bla.Visible = False gestellt, so dass sie auch nicht störend an anderer Stelle Dinge überdecken, oder "Verschmutzung" sind.
Dies geht auch mit "Shapes" (KEINE ActiveX) die vielleicht schicker aussehen.

Hallo, ich sehe 2 Ansätze:
1. mach nur einen Button je Funktion im Kopfbereich. Dieser führt dann den Befehl für die Zeile aus, in der gerade dein Curser steht. Die Position der markierten Zelle kannst du auslesen mit
Zeile=Selection.Row
Nachdem es bei Makros aber kein UnDo gibt, würde ich eine Sicherheitsfrage einbauen:
Antwort = MsgBox("Bist du sicher, Zeile " & Zeile & " zu löschen?", vbYesNo)
If Antwort = 7 Then End

Zweiter Ansatz: wenn du wirklich diesen schönen Komfort haben willst, geht das am besten mit einem Userform, in das du immer z.B. nur 10 Zeilen einliest. die 3x 10 Knöpfe "wissen" dann um welche Zeilen es sich handelt. Das ist zwar aufwändig, funktioniert aber toll und ist in der Bedienung wirklich deppensicher.

Woher ich das weiß:eigene Erfahrung – Faulheit >> Neugier >> Wissen

neo007bb851 
Beitragsersteller
 01.03.2021, 17:36

Danke! Ansatz 1 gefällt mir an sich gut, nur möchte ich die Steuerelemente direkt in der Zeile haben, die es betrifft. Kollegen, die das Programm benutzen sollen brauchen es einfach und intuitiv. Die betreffende Zeile zuerst anzuklicken, dann den Button zu drücken und auch noch wo ganz anders als in der Zeile selbst ist teilweise leider bereits zu hoch gegriffen.

Ansatz 2 gefällt mir auch, nur dass ich die gesamte Liste jetzt im Augenblick auf Excel-Oberfläche aufgebaut habe. Die auf Userform umzubauen wäre zu aufwändig und langwierig. Der Prototyp der Liste ist bereits in Benutzung und wird Stück für Stück um Funktionen erweitert. Wenn ich mal viel Zeit und Lust habe, überlege ich auf jeden Fall, ihn in eine Userform umzubauen. Dann wird das alles auch etwas übersichtlicher und einfacher.

Da ich zu Beginn der Programmierung meiner Liste aber Anfänger war, habe ich eine Userform nicht in Betracht gezogen.

Danke für Deine Vorschläge!