none
Cóigo em VBA para evitar copiar células. RRS feed

  • Pergunta

  • Boa tarde!<o:p></o:p>

    Por favor! Uma solução para o problema.

    Fazer um procedimento em vba para copiar o conteúdo das células G2 a Q2.<o:p></o:p>

    Apenas quando a célula F2, receber dados.

    Grato - GENECI.<o:p></o:p>


    quinta-feira, 8 de dezembro de 2016 19:04

Respostas

  • Abra o VBA e execute um duplo clique na planilha que quer codificar. O código desejado fica mais ou menos assim:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
        Set KeyCells = Range("F2:F999")
        Set CopyCells = Range("G2:Q2")
        
        If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
            If Range("F2").Value <> "" Then
                If Target.Row = 2 Then
                    CopyCells.Select
                    Selection.Copy
                    Range("G3:Q3").Select
                    ActiveSheet.Paste
                    Application.CutCopyMode = False
                Else
                    If Range("F" & Target.Row).Value <> "" Then
                        CopyCells.Select
                        Selection.Copy
                        Range("G" & Target.Row & ":" & "Q" & Target.Row).Select
                        ActiveSheet.Paste
                        Application.CutCopyMode = False
                    Else
                        Range("G" & Target.Row & ":" & "Q" & Target.Row).ClearContents
                    End If
                End If
            Else
                If Target.Row = 2 Then
                    Range("G3:Q3").ClearContents
                Else
                    Range("G" & Target.Row & ":" & "Q" & Target.Row).ClearContents
                End If
            End If
        End If
    End Sub
    

    Duas limitações:

    1 - Usando VBA , não é possível aplicar o Desfazer (Ctrl+Z) nos valores alterados pelo código.

    2 - Com o código proposto, se você apagar F2 depois de tudo preenchido, as linhas abaixo de F3 não serão apagadas automaticamente. Para isso, será necessário apagar um a um.

    sexta-feira, 9 de dezembro de 2016 17:55

Todas as Respostas

  • Olá. Você quer um código para copiar ou evitar a cópia?
    quinta-feira, 8 de dezembro de 2016 22:18
  • Bom dia!

    Pretendo copiar todo o conteúdo das células G2 a Q2 apenas quando a célula F2 for preenchida.

    Grato - Geneci

    sexta-feira, 9 de dezembro de 2016 10:32
  • Bom dia!

    Eu quero um código para copiar.

    Grato - GENECI.

    sexta-feira, 9 de dezembro de 2016 10:35
  • Bom dia!

    Desculpas o título do código está errado.

    Eu quero um código para copiar.

    Grato - GENECI.

    sexta-feira, 9 de dezembro de 2016 10:37
  • Ok. Você pretende que o conteúdo copiado fique na área de transferência ou usado em outra planilha? Ou seja, qual o destino da cópia.
    • Editado J. Maurício sexta-feira, 9 de dezembro de 2016 10:47
    sexta-feira, 9 de dezembro de 2016 10:46
  • O destino da cópia é G3 a Q3 só quando a célula F3 for preenchida.

    G4 a Q4 só quando a célula F4 for preenchida.

    G5 a Q5 só quando a célula F5 for preenchida.

    G6 a Q6 só quando a célula F6 for preenchida.

    G7 a Q7 só quando a célula F7 for preenchida.

    E assim segue sucessivamente.

    sexta-feira, 9 de dezembro de 2016 12:52
  • Olá. Se entendi direito, você não precisa de macro para isso.

    Basta você colocar a seguinte fórmula em G3:

    =SE(E(NÃO(ÉCÉL.VAZIA($F$2));NÃO(ÉCÉL.VAZIA($F3)));G$2;"")

    Arraste a fórmula da esquerda para a direita até Q3.

    Selecione a nova linha (G3:Q3) e arraste para baixo até onde desejar.


    • Editado J. Maurício sexta-feira, 9 de dezembro de 2016 14:01
    sexta-feira, 9 de dezembro de 2016 13:59
  • Boa tarde!

    Muito obrigado.

    O resultado é exatamente esse que a fórmula apresentou.

    Como estou começando a conhecer VBA, há possibilidades de desenvolver o procedimento em VBA?

    Caso contrario estou satisfeito.

    Grato - GENECI.

    sexta-feira, 9 de dezembro de 2016 14:44
  • É possível sim. Assim que tiver um tempo posto o resultado.
    sexta-feira, 9 de dezembro de 2016 14:57
  • Abra o VBA e execute um duplo clique na planilha que quer codificar. O código desejado fica mais ou menos assim:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
        Set KeyCells = Range("F2:F999")
        Set CopyCells = Range("G2:Q2")
        
        If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
            If Range("F2").Value <> "" Then
                If Target.Row = 2 Then
                    CopyCells.Select
                    Selection.Copy
                    Range("G3:Q3").Select
                    ActiveSheet.Paste
                    Application.CutCopyMode = False
                Else
                    If Range("F" & Target.Row).Value <> "" Then
                        CopyCells.Select
                        Selection.Copy
                        Range("G" & Target.Row & ":" & "Q" & Target.Row).Select
                        ActiveSheet.Paste
                        Application.CutCopyMode = False
                    Else
                        Range("G" & Target.Row & ":" & "Q" & Target.Row).ClearContents
                    End If
                End If
            Else
                If Target.Row = 2 Then
                    Range("G3:Q3").ClearContents
                Else
                    Range("G" & Target.Row & ":" & "Q" & Target.Row).ClearContents
                End If
            End If
        End If
    End Sub
    

    Duas limitações:

    1 - Usando VBA , não é possível aplicar o Desfazer (Ctrl+Z) nos valores alterados pelo código.

    2 - Com o código proposto, se você apagar F2 depois de tudo preenchido, as linhas abaixo de F3 não serão apagadas automaticamente. Para isso, será necessário apagar um a um.

    sexta-feira, 9 de dezembro de 2016 17:55
  • Bom dia! J. Maurício

    Muito obrigado.

    sábado, 10 de dezembro de 2016 10:53
  • Olá. Feliz em ajudar e obrigado pelo retorno. Se possível, altere o título deste thread para não confundir quem venha a pesquisá-lo no futuro (remova a palavra evitar). Obrigado.
    • Editado J. Maurício sábado, 10 de dezembro de 2016 12:42
    sábado, 10 de dezembro de 2016 12:41
  • Olá. Pertinente a sua orientação, ficou complicado nunca fiz esse procedimento.

    Pode informar o passo a passo.

    Grato.

    Código VBA para copiar células.

    • Editado GENECIOFICIAL sábado, 10 de dezembro de 2016 16:42 Correção
    sábado, 10 de dezembro de 2016 14:04
  • Com a conta que você formulou a pergunta, debaixo do título (primeiro post) clique em editar, altere e cliquem em enviar.
    • Editado J. Maurício sábado, 10 de dezembro de 2016 14:26
    sábado, 10 de dezembro de 2016 14:25