Botão Adicionar para copiar linhas do Excel

2

Eu quero adicionar um botão em uma linha em uma planilha que copie o conteúdo de uma célula para outra se e quando eu clicar no botão. Eu já encontrei o código para fazer isso, no entanto, quero poder copiar o botão para uma nova linha e fazer com que ele funcione nessa linha, com as células nessa linha, sem precisar entrar e alterar o código.

Este código abaixo é o que eu tenho, mas é específico para a linha em que está escrito:

Sub CopyValue()

    ActiveSheet.Range("O7").Value = ActiveSheet.Range("K7")
    ActiveSheet.Range("R7").Value = ActiveSheet.Range("N7")

End Sub

e copia K7 do conteúdo da célula para O7 do conteúdo da célula, etc.

Se eu copiar o botão da próxima linha, não funcionará para essa linha, a menos que eu entre e mude o código, o que significa adicionar um novo botão ou nome e código de macro para fazer isso.

Eu quero apenas copiar e adicionar uma linha abaixo várias vezes e fazer com que ela funcione nessa linha. As fórmulas de célula funcionam dessa maneira, mas como faço para acionar uma fórmula de célula com um clique de um botão na mesma linha?

Eu preciso fazer isso em centenas ou mais linhas, apenas copiando e colando ou duplicando a linha ou copiando e colando o botão em uma nova linha.

Eu tenho o Excel 2007.

    
por Mark Nev 29.12.2014 / 03:36

2 respostas

0

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.

    
por 29.12.2014 / 21:28
-2

Eu sugeriria o método cell-as-button usando um clique duplo em uma célula na coluna Z para acionar a macro de evento Worksheet_BeforeDoubleClick sheet.

Clique com o botão direito do mouse na guia de nome da planilha e escolha View Code . Quando o VBE abrir, cole o seguinte na folha intitulada algo como Folha1 (Código) . Note que isso não é uma folha de módulo como a que contém seu código anterior usado como amostra.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("Z:Z")) Is Nothing Then
        If LCase(Target.Value) = "xfer vals" Then
            Cancel = True
            Me.Range("O" & Target.Row) = Me.Range("K" & Target.Row).Value
            Me.Range("R" & Target.Row) = Me.Range("N" & Target.Row).Value
        End If
    End If
End Sub

Com isso colado na planilha de código da planilha, ajuste o intervalo Z: Z para qualquer coluna que você queira usar como pseudo-botões. Eu também adicionei uma condição que as células devem conter alguma forma de xfer vals como um valor de texto, então mude isso se você desejar. Quando tiver concluído as modificações, toque em Alt + Q para retornar à sua planilha.

Na coluna Z, digite xfer vals (ou o que quer que você tenha alterado) em uma célula contendo valores que você deseja transferir. Dê à célula um preenchimento de fundo e / ou uma borda, se desejar. Clicar duas vezes nele irá transferir os valores.

Você deve conseguir copiar a linha de fórmula (s) / valor (es) / pseudo-botão para qualquer nova linha e fazer com que o botão funcione de acordo com a nova linha.

Observe que alterei o .Values do destino para a origem. Se você for usá-lo apenas em um lado da linha de código, a fonte é o local apropriado para usá-lo.

    
por 29.12.2014 / 05:22