Excel VBA: Bestellliste mit Buttons?
Hallo liebe Excel-Profis,
ich habe eine Bestell-Liste gebastelt, in der ich nacheinander Artikel und Hersteller und auch Besteller eintragen kann. Die Liste sortiert und summiert mir die einzelnen Posten, sodass ich verschiedene Aufträge nur noch "herunterschreiben" muss.
Nun möchte ich die Liste um ein paar Funktionen erweitern.
Ich lasse nun per VBA-Code pro Zeile drei Buttons einfügen und weise diesen jeweils ein Makro zu. Einen + Butten, einen - Button und einen Delete-Button. Funktion ist wahrscheinlich klar. Posten erhöhen, reduzieren und kompletten Posten löschen.
Problem 1 ist, dass ich beim Klicken auf einen Button in einer beliebigen Zeile über das gestartete Makro erkennen muss, in welcher Zeile sich der Button befindet, um genau diese Zeile der Liste bearbeiten zu können.
Wie ermittle ich die Zeile, in der sich der Button befindet, um genau diese Zeile mit dem Makro zu addressieren?
Problem 2 ist, dass die Liste über eine Sortierfunktion verfügt. Wie sortiere ich die Buttons gleichzeitig mit den Einträgen? Gibt es eine Möglichkeit, die Grafiken mit der gesamten Zeile zu "verknüpfen", sodass sie quasi mit zur Zelle gehören? Hintergrundgrafik oder soetwas? Und kann ich Ihnen dann noch ein Makro zuweisen?
Danke für Eure Antworten!
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
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.
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.
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!
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!