Valeu Mauro.
Pode só me explicar porque mete "-1" no código? Assim me esmaga informação se usar o mesmo código para colar novamente
Miguexcel, eu não sei o que quer dizer com a expressão :
"Assim me esmaga informação se usar o mesmo código para colar novamente"
Mas quanto a sua pergunta, o ideal quando estamos começando a lidar com VBA é procurar ler um pouco sobre o assunto e conhecermos pelo menos os principios básicos e uma outra dica que eu acho bem valiosa é utilizar o recurso Passo a Passo (F8) na janela do VBA para seguirmos a execução da macro.
Então para você poder compreender melhor faça o seguinte :
1º ) Abra uma nova planilha qualquer e preencha com dados qualquer da celula A1 até D15;
2º ) Abra a janela do VBA ALT + F11 e cole as rotinas abaixo :
Altere o tamanho da Janela do VBA de modo que posso enxergar a aba com os dados ao fundo, e vá pressionando a tecla F8, verá que aparecerá uma linha amarela a cada toque do F8, ou seja estamos executando a rotina passo a passo.
Assim, ao executar esta rotina verá que será selecionado todas as celulas preenchidas.
Sub SelecionaTudo()
ActiveCell.CurrentRegion.Select
End Sub
Como na rotina estamos usando ActiveCell, significa a celula ativa, então supondo que a celula selecionada seja qualquer uma dentro da tabela que tenha dados será selecionado de A1 até D15, mas supondo que a celula selecionada seja E1 então será selecionada de A1 até E15 ,e se a celula selecionada for E16 será selecionado de A1 até E16, ou seja, foi selecionado uma linha e coluna vazia, e devido a isto utilizamos o -1, tudo isto poderá acompanhar utilizando o F8.
CurrentRegion - representa a região com dados, ou seja se a celula selecionada for em uma área sem dados, não será selecionado nada.
agora na rotina que passei :
Range("A2").CurrentRegion.Offset(1, 0).Resize( _
Range("A2").CurrentRegion.Rows.Count - 1, _
Range("A2").CurrentRegion.Columns.Count).Copy
No lugar de A2 poderia ser ActiveCell, mas isto me forçaria a instruir antes que fosse selecionado um Range, e como passou A2 só incrementei da forma que estava, poderia ter colocado A1 tambem.
Como leu acima, ActiveCell.CurrentRegion.Select, selecionará sempre uma linha vazia abaixo da que contem dados, então instruímos -1 que é para retornar o foco para uma linha acima da preenchida.
Traduzindo a rotina, temos :
CurrentRegion - região com dados
Offset(1, 0) - Estamos considerando que temos uma linha de cabeçalho, assim ignoramos esta linha,
Resize(Range("A1").CurrentRegion.Rows.Count - estamos redimensionando o Range utilizando a contagem de linhas, e neste caso se não utilizarmos o -1, se executar no modelo que eu disse acima, será selecionado até a linha 16 que está em branco.
Execute utilizando a tecla F8, elimine o -1 e depois coloque novamente e poderá entender melhor.
Me estendi demais, espero que tenha compreendido.
Mas procure montar este modelo que passei e executar passo a passo estas instruções, irá entender bem melhor.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 02/06/2015 11:25 am