Buttons zeilenabhängig erstellen u löschen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Buttons zeilenabhängig erstellen u löschen
von: Joern
Geschrieben am: 17.11.2015 09:48:47

Hallo zusammen,
ich habe folgende Überlegung:
Es geht um den Lagerbestand von Teilen. Und ich möchte folgendes tun:
Ich habe eine Liste in Tabelle1, in die bei per VBA (Button-Klick in einem anderen Tabellenblatt) neue Zeilen eingefügt werden (copy-paste von einem anderen Tabellenblatt in die nächste freie Zeile). Die Spalten sind immer gleich (Artikelbeschreibungen usw).
Jedes Mal wenn eine neue Zeile eingefügt wird und eine bestimmte Bedingung erfüllt ist, soll dabei zusätzlich in der entsprechenden neuen Zeile in der Spalte "K" ein Button auf Zellgröße eingefügt werden.
Bis dahin funktioniert alles.
Wenn nun auf diesen Button geklickt wird, sollen die Daten der jeweiligen Zeile wieder gelöscht werden und der Button soll ebenfalls gelöscht werden.
Das klappt bisher nicht richtig...
Dabei versuche ich die zu löschende Zeile über den angeklickten Button zu ermitteln,
aber irgendetwas funktioniert da nicht. Wenn ich mir die ausgelesene Adresse per Message-Box anzeigen lassen, sehe ich, dass beim Löschen die Buttons nach Erstell-Reihenfolge und nicht nach Zeile gelöscht werden. Daher werden auch die Zeilen in ihrer Reihenfolge von oben nach unten gelöscht, egal auf welche Buttons ich klicke.
Was kann der Fehler sein? Hat es vielleicht etwas mit der Namensgebung der Buttons zu tun?!!
Bitte um Hilfe!
Anbei der Code zum Erstellen des Buttons

Sub ButtonErstellen()
Dim Zeilenvariable as Variant
Zeilenvariable = Tabelle3.Range("AB15").Value
'Prüfung ob Teile verfügbar sind
If Tabelle1.Range("AQ19") >= 0 Then
'Button einfügen zur weiteren Bearbeitung
Dim objButton   As Object
    Dim strObjekt   As String
    Dim cTop        As Currency
    Dim cLeft       As Currency
    Dim cHeight      As Currency
    Dim cWidth      As Currency
    Dim sheet       As Worksheet
    With Tabelle1.Range("K" & Zeilenvariable)
        cTop = .Top
        cLeft = .Left
        cHeight = .Height
        cWidth = .Width
    End With
       
    Set objButton = Tabelle1.Buttons.Add(cLeft, cTop, cWidth, cHeight)
    objButton.OnAction = "LOS"
    objButton.Caption = "Weiter"
    objButton.Placement = xlMoveAndSize
    objButton.Name = "btnLOS"
Else
End If
End Sub
Der Button soll schon bei Erstellung, das Makro zum Löschen zugewiesen bekommen, ich habe den Code in ein Modul geschrieben.
Hier der Code, der von jedem neu erstellten Button genutzt werden soll
Sub LOS()
Dim a As Variant
Dim adresse As Variant
adresse = ActiveSheet.Buttons(Application.Caller).TopLeftCell.Address & vbLf
Dim wert() As String
Dim zeile As Variant
wert = Split(Range(adresse).Address, "$")
msgbox "Spalte: " & wert(1) & Chr(13) & "Zeile: " & wert(2)
zeile = wert(2)
'Button löschen
ActiveSheet.Buttons(Application.Caller).Delete
'Ganze Zeile löschen
Tabelle1.Range("b" & zeile & ": K" & zeile).Select
Selection.ClearContents
'Zelle wieder Ursprungsformat herstellen
Tabelle1.Range("J51").Select
    Selection.Copy
    Range("J" & zeile).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End Sub

Bild

Betrifft: AW: Buttons zeilenabhängig erstellen u löschen
von: EtoPHG
Geschrieben am: 17.11.2015 10:20:31
Hallo Joern,
Wieso willst du einen Button löschen und an einer anderen Stelle wieder einen neuen mit der gleichen Funktion einfügen?
Es wäre doch viel einfacher, den Button am Leben zu lassen und einfach an die neue Stelle zu verschieben!
Gruess Hansueli

Bild

Betrifft: AW: Buttons zeilenabhängig erstellen u löschen
von: Joern
Geschrieben am: 17.11.2015 10:57:24
Hallo Hansueli,
die Datei besteht aus mehreren Tabellenblättern, die jeweils gleichbedeutend mit einer Funktion/Abteilung sind. In einem Tabellenblatt kann man die Eigenschaften eines Teiles auswählen und dann quasi per Button einen Bestellauftrag "abschicken" (hier gibt es nur einen, den "Bestellung"-Button), woraufhin die neue Bestellung im beschriebenen Tabellenblatt1 erscheint (Eine Art Lagerübersicht). Dort soll die Bestellmenge manuell mit dem Lagerbestand abgeglichen werden und wenn das passt, soll der Bestellauftrag per Bestätigungsklick (hier gibt es für jeden Bestellauftrag einen eigenen Button) weitergehen zur nächsten Abteilung (wieder ein weiteres Tabellenblatt) und eben aus der Lagerübersicht wieder verschwinden.
Es handelt sich also um viele verschiedene Tabellenblätter.
Ich hoffe ich konnte das einigermaßen verständlich erklären ?!
Schöne Grüße

Bild

Betrifft: AW: Buttons zeilenabhängig erstellen u löschen
von: Joern
Geschrieben am: 17.11.2015 12:52:13
Hallo,
meine Anfrage hat sich gerade erledigt. Habe mittlerweile durch Trial & Error selber die Lösung gefunden:
In den Eigenschaften von den Buttons hab ich noch eine hochzählende Variable in den Objektnamen eingebaut, so dass sichergestellt ist, dass alle Buttons einen anderen Namen haben. Das scheint es gewesen zu sein, denn jetzt funktioniert es. Trotzdem danke an alle, die sich die Mühe gemacht haben, diesen Beitrag zu lesen und darüber nachzudenken!
Set objButton = Tabelle1.Buttons.Add(cLeft, cTop, cWidth, cHeight)
objButton.OnAction = "LOS"
objButton.Caption = "Weiter"
objButton.Placement = xlMoveAndSize
objButton.Name = "btnLOS" & alpha
Schöne Grüße

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Buttons zeilenabhängig erstellen u löschen "