Wie identifiziere ich ein generisches Button-Control in einer Excel-Tabelle?

1

Ich habe eine Excel-Tabelle mit einer benannten Tabelle erstellt. Am linken Rand der ersten Zeile habe ich ein Schaltflächen-Steuerelement mit der Bezeichnung "+" hinzugefügt. Diese Schaltfläche führt ein Makro aus, das immer eine neue letzte Zeile am Ende der Tabelle hinzufügt. Jede neue Zeile enthält auch eine Kopie dieser Schaltfläche (obwohl sich die Schaltfläche selbst in Spalte A nicht im Bereich der benannten Tabelle befindet). Wie auch immer, all diese generischen Tasten funktionieren genauso.

Nun möchte ich auf die gleiche Weise eine weitere Schaltfläche ("-") hinzufügen, diesmal möchte ich jedoch die Zeile der Schaltfläche, auf die ich geklickt habe, ENTFERNEN. Dazu muss ich die genaue Schaltfläche identifizieren, auf die geklickt wurde, und die Zeile herausfinden, in der sie platziert ist.

Es sieht aus wie das:

Bildbeschreibung hier eingeben

Ist das überhaupt möglich und wie?

BEARBEITEN : Um die Kommentare zu adressieren:

Code zum Hinzufügen einer neuen Zeile am Ende:

ActiveSheet.ListObjects("TimeSheetTable").Resize Range("$B$" & HEADERROW & ":$H$" & iNewRow)

'Duplicate the previous row
Rows(iNewRow- 1).Select
Application.CutCopyMode = False
Selection.Copy
Rows(iNewRow).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Magier
quelle
1
Bitte geben Sie den Code ein, den Sie bereits für den Zusatz haben.
Máté Juhász
Wenn Sie über das Zeichen "-" für die zu entfernende Schaltfläche sprechen, kann es mithilfe der Caption-Eigenschaft der Befehlsschaltfläche geändert oder gelöscht werden.
Rajesh S
Ich bin wirklich überrascht, dass Sie den Button kopieren, nachdem er der Tabelle eine Zeile hinzugefügt hat.
Rajesh S
@ RajeshS Die Beschriftung der Schaltfläche ist hier nicht das Problem. Alles dreht sich um die Funktionalität.
Magier

Antworten:

2

Ich möchte Ihnen vorschlagen, den folgenden VBA-Code zu verwenden. Sie müssen es mit der Befehlsschaltfläche aufrufen, auf die geklickt wurde.

Sub WhichOneClicked()

  Dim b As Object, iBtnRow As Integer
  Set b = ActiveSheet.Buttons(Application.Caller)

  With b.TopLeftCell
    iBtnRow= .Row
  End With

 MsgBox "Row Number " & iBtnRow

End Sub

Hoffe das hilft dir.

Rajesh S
quelle
Perfekte Lösung, ich habe es modifiziert, um die ROW zu erhalten (die ich in diesem Fall brauche).
Magier
Schön, dass du hier bist, frag weiter.
Rajesh S
0

Ich habe noch eine Lösung, die viel einfacher ist und die geklickte Schaltfläche direkt identifiziert. Der Umfang ist begrenzt, aber für ALLE einfach und verständlich.

Private Sub CommandButton1_Click()

Dim ButtonName
ButtonName = "CommandButton1"
MsgBox "You have clicked the " & ButtonName & " just now button."

End Sub

NB: Zusammen mit diesem Code können andere VBA-Codes enthalten sein oder er kann innerhalb des anderen Codes aufgerufen werden.

Rajesh S
quelle
2
Dazu müsste Subfür jede Schaltfläche eine eigene erstellt werden, was in diesem Fall nicht möglich erscheint, da die Anzahl der Schaltflächen dynamisch ist.
Máté Juhász