Você pode usar o código VBA a seguir para atingir sua meta com muito mais facilidade do que gerar código para botões individuais do ActiveX ou do Controle de formulários.
O seguinte VBA permite ao usuário clicar duas vezes em uma célula em uma coluna designada (a "coluna de botão") e o código copia os valores na mesma linha em que o usuário clicou duas vezes de as colunas de origem para destino especificadas. Esse código funciona em todas as linhas da sua planilha, sem que você precise modificar o código de qualquer maneira.
Não seja rejeitado pelas referências repetidas do código às células da linha 1 (por exemplo, O1
e K1
). Em cada um desses casos, a propriedade .Column
é usada porque estamos interessados apenas na coluna em questão. A linha que será manipulada é sempre a mesma linha que o usuário clica duas vezes.
No Excel VBA Editor (pressione Alt + F11 para abrir), navegue até o módulo da planilha e cole o seguinte código:
Private Sub
Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo Quit
'Copy values between columns on same row that user double-clicks
'Quit if Target range includes more than one cell
If Target.Count > 1 Then Exit Sub
With ActiveSheet
'Here, specify the worksheet column the user can double-click to activate this
'routine. For the "B" column, in the Range method specify cell "B1" (all cells
'in column will be used, not just that on row 1).
If Target.Column = .Range("B1").Column Then
.Cells(Target.Row, .Range("O1").Column) = .Cells(Target.Row, .Range("K1").Column)
.Cells(Target.Row, .Range("R1").Column) = .Cells(Target.Row, .Range("N1").Column)
Cancel = True 'Cancel the double-click
End If
'Here you can specify a second "button column" with its own set of copy actions.
If Target.Column = .Range("C1").Column Then
.Cells(Target.Row, .Range("E1").Column) = .Cells(Target.Row, .Range("F1").Column)
.Cells(Target.Row, .Range("G1").Column) = .Cells(Target.Row, .Range("H1").Column)
Cancel = True 'Cancel the double-click
End If
End With
Quit:
End Sub
Conforme escrito, o código será acionado quando o usuário clicar duas vezes em qualquer célula na coluna B
. Para alterar isso, modifique esta linha de código para apontar para a coluna que você deseja que atue como sua "coluna de botão":
If Target.Column <> .Range("B1").Column Then Exit Sub
O restante do código deve ser autoexplicativo, mas faça todas as perguntas que você tiver.
Editar: alterei o VBA para permitir duas colunas de botões, cada uma capaz de copiar valores entre diferentes colunas de origem e destino.