Botão de macro do Excel VBA para copiar e colar que aumenta a cada pressionamento

4

Estou tentando criar um botão para preencher automaticamente a célula B5 com informações de outra planilha A1: A10,

sempre que o botão é pressionado, quero que o B5 tenha informações da célula A1, depois que o botão for pressionado novamente, informações de A2 e assim por diante, ele precisará ser executado

    
por d123 13.06.2018 / 23:57

2 respostas

2

Aqui está um método simples e curto.

Você precisará de um contador para incrementar a cada pressionamento de botão. Você precisará colocar isso em algum lugar da sua planilha. Nesse exemplo, ele está abaixo do botão.

  1. Primeiro decida onde seu contador irá, pois este exemplo estará diretamente abaixo do botão.

  • Insira seu botão.
  • Atribuir macro ao seu botão, certifique-se de salvá-lo na pasta de trabalho.
  • Cole o código abaixo no VBA Editor para o seu Button Click.
  • Código

    Sub Button1_Click()
    
        Dim CopySheet As Worksheet, PasteSheet As Worksheet
        Dim xFrom As Integer, xTo As Integer, i As Integer
        Dim pasteCell As String, cCell As String
    
        'Sheets
        Set CopySheet = Worksheets("Sheet2") 'Sheet you are copying from.
        Set PasteSheet = Worksheets("Sheet1")  'Sheet you are pasting into.
    
        'Rows, range of rows start from row rStart to rEnd
        rStart = 1 'Start of Row you want to copy from.
        rEnd = 10 'End of Row you want to copy from.
    
        'Cells
        pasteCell = "B5" 'Cell we will paste data from CopySheet.
    
        'Counter will increments with each button press.
        cCell = "E5" 'Change "E5" to reference cell on your spreadsheet.
        i = Range(cCell).Value
    
        Application.ScreenUpdating = False 'We disable Screen Updating to prevent interruption.
    
        'Update Counter
        i = i + 1
        If (i > rEnd) Then
            i = rStart
        End If
        Range(cCell).Value = i
    
        'Copy/Paste Functions
        CopySheet.Select
        Range("A" & i).Select
        Selection.Copy
        PasteSheet.Select
        Range(pasteCell).Select
        ActiveSheet.Paste
    
        Application.ScreenUpdating = True 'Enable Screen Updating at end of operation.
    End Sub
    

    Obotãoserácopiadocombasenonúmerodocontadormais1,porisso,seonúmerofor0nobotão,pressioneamacroparaadicionaro0+1einicieasfunçõesdecopiarecolar.

        
    por 14.06.2018 / 02:09
    1

    Não há necessidade de armazenar um contador em uma célula na pasta de trabalho. Você pode usar uma variável estática.


    Cole o seguinte código em qualquer módulo que não seja de classe:

    '============================================================================================
    ' Module     : <any non-class module>
    ' Version    : 0.1.0
    ' Part       : 1 of 1
    ' References : N/A
    ' Source     : https://superuser.com/a/ANSWER_ID/763880
    '============================================================================================
    Option Explicit
    
    Public Sub Next_Click()
    
      Const s_DestSheet As String = "Sheet1"
      Const s_DestRange As String = "B5"
      Const s_SrcSheet As String = "Sheet2"
      Const s_SrcCell As String = "A1:A10"
    
      Static sidxCurrentCell As Variant: If IsEmpty(sidxCurrentCell) Then sidxCurrentCell = -1
    
      With Worksheets(s_SrcSheet).Range(s_SrcCell)
        sidxCurrentCell = (sidxCurrentCell + 1) Mod .Cells.Count
        .Cells(sidxCurrentCell + 1).Copy Destination:=Worksheets(s_DestSheet).Range(s_DestRange)
      End With
    
    End Sub
    

    Em seguida, atribua-o ao seu botão.


    O único problema com esse código é que ele não lembra qual célula estava fazendo quando você reabre a pasta de trabalho e reinicia a partir da primeira célula. Isso pode ser resolvido se desejado.

        
    por 14.06.2018 / 06:22