Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Buttons zeilenabhängig erstellen u löschen

Forumthread: Buttons zeilenabhängig erstellen u löschen

Buttons zeilenabhängig erstellen u löschen
17.11.2015 09:48:47
Joern
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

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Buttons zeilenabhängig erstellen u löschen
17.11.2015 10:20:31
EtoPHG
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

AW: Buttons zeilenabhängig erstellen u löschen
17.11.2015 10:57:24
Joern
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

Anzeige
AW: Buttons zeilenabhängig erstellen u löschen
17.11.2015 12:52:13
Joern
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
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Buttons zeilenabhängig erstellen und löschen in Excel


Schritt-für-Schritt-Anleitung

  1. Button erstellen: Du kannst einen Button in Excel mithilfe von VBA erstellen. Der folgende Code fügt einen Button in die Zelle K einer bestimmten Zeile ein:

    Sub ButtonErstellen()
        Dim Zeilenvariable As Variant
        Zeilenvariable = Tabelle3.Range("AB15").Value
    
        If Tabelle1.Range("AQ19") >= 0 Then
            Dim objButton As Object
            Dim cTop As Currency, cLeft As Currency, cHeight As Currency, cWidth As Currency
    
            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" & Zeilenvariable ' Hochzählende Variable einfügen
        End If
    End Sub
  2. Button-Funktionalität: Der Button soll beim Klicken die Daten in der entsprechenden Zeile löschen und sich selbst entfernen. Der folgende Code erfüllt diese Funktion:

    Sub LOS()
        Dim adresse As Variant
        adresse = ActiveSheet.Buttons(Application.Caller).TopLeftCell.Address
    
        Dim wert() As String
        wert = Split(Range(adresse).Address, "$")
    
        Dim zeile As Variant
        zeile = wert(2)
    
        ' Button löschen
        ActiveSheet.Buttons(Application.Caller).Delete
        ' Ganze Zeile löschen
        Tabelle1.Range("B" & zeile & ":K" & zeile).ClearContents
        ' Zelle wieder im Ursprungsformat herstellen
        Tabelle1.Range("J51").Copy
        Range("J" & zeile).PasteSpecial Paste:=xlPasteFormats
    End Sub

Häufige Fehler und Lösungen

  • Button wird nicht korrekt gelöscht: Wenn der Button nicht die erwartete Zeile löscht, stelle sicher, dass jeder Button einen einzigartigen Namen hat. Verwende eine hochzählende Variable im Namen, um Namenskonflikte zu vermeiden.

  • Daten werden nicht gelöscht: Vergewissere dich, dass die richtige Zeile ermittelt wird. Debugge den Code, um sicherzustellen, dass die TopLeftCell des Buttons korrekt erkannt wird.


Alternative Methoden

  • Buttons verschieben statt löschen: Anstatt einen Button zu löschen, könntest du ihn an eine neue Position verschieben. Dies spart Ressourcen und vermeidet Namenskonflikte. Verwende dazu die .Top und .Left Eigenschaften des Buttons.

  • HTML-Buttons erstellen: Wenn Du eine Webanwendung hast, kannst Du HTML-Buttons erstellen, die ähnliche Funktionen wie die Excel-Buttons haben, aber direkt in einem Webbrowser verwendet werden.


Praktische Beispiele

  • Lagerbestandsverwaltung: Erstelle eine Excel-Tabelle für die Verwaltung von Lagerbeständen. Jedes Mal, wenn ein Artikel bestellt wird, kannst du einen Button hinzufügen, um den Artikel zu bestätigen und den Lagerbestand zu aktualisieren.

  • Bestellaufträge: Verwende Buttons, um Bestellungen zu stornieren oder zu ändern. Jeder Button kann spezifische Makros ausführen, um die entsprechenden Daten zu bearbeiten.


Tipps für Profis

  • Code modularisieren: Halte Deinen VBA-Code sauber und modular, indem Du Funktionen für wiederkehrende Aufgaben erstellst. Das macht Deinen Code wartungsfreundlicher.

  • Testen der Funktionalität: Teste alle Buttons nach der Implementierung, um sicherzustellen, dass sie die richtigen Zeilen ansprechen und die gewünschten Aktionen ausführen.

  • Dokumentation: Dokumentiere Deine VBA-Codes und deren Funktionen. Das hilft nicht nur Dir, sondern auch anderen Nutzern, die möglicherweise Deinen Code übernehmen oder anpassen möchten.


FAQ: Häufige Fragen

1. Wie kann ich einen Button in Excel entfernen?
Um einen Button in Excel zu entfernen, kannst Du den Befehl ActiveSheet.Buttons("ButtonName").Delete verwenden. Alternativ kannst Du auch die GUI verwenden, um den Button auszuwählen und zu löschen.

2. Kann ich mehrere Buttons gleichzeitig erstellen?
Ja, Du kannst in einer Schleife mehrere Buttons erstellen, indem Du die oben genannten Schritte in einer For-Schleife umsetzt und dabei jeweils eine neue Zeile angibst.

3. Warum funktionieren meine Buttons nicht?
Stelle sicher, dass die Buttons korrekt benannt sind und dass die zugewiesenen Makros existieren. Überprüfe auch, ob die Makros aktiviert sind und keine Sicherheitswarnungen angezeigt werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige