Como identificar o controle de botão genérico na tabela do Excel?

1

Eu criei uma planilha do Excel com uma tabela nomeada. Na borda esquerda da primeira linha, adicionei um controle de botão chamado "+". Este botão executa uma macro que sempre adiciona uma nova última linha na parte inferior da tabela. Qualquer nova linha também contém uma cópia desse botão (embora o próprio botão na Coluna A não esteja na área da tabela nomeada). De qualquer forma, todos esses botões genéricos fazem exatamente o mesmo.

Agora, quero adicionar outro botão ("-") da mesma maneira, mas, desta vez, gostaria de REMOVER a linha do botão em que cliquei. Para fazer isso eu tenho que identificar o botão exato que foi clicado e descobrir a linha onde ele é colocado.

Parece assim:

Issoépossívelecomo?

EDITAR:Paraabordaroscomentários:

Códigoparaadicionarumanovalinhanofinal:

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
    
por Magier 08.01.2018 / 23:48

2 respostas

2

Eu gostaria de sugerir que você use o seguinte código VBA. Você precisa chamá-lo com o botão de comando que você deve identificar como clicado.

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

Espero que isso ajude você.

    
por 09.01.2018 / 10:08
0

Eu tenho mais uma solução que é muito mais fácil e strait forward identifica o botão clicado. Tem escopo limitado, mas é simples e fácil de entender para TODOS.

Private Sub CommandButton1_Click()

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

End Sub

NB: Juntamente com este código, outros códigos VBA podem ser incluídos ou podem ser chamados dentro de outro código.

    
por 09.01.2018 / 11:00