- Este tópico contém 6 respostas, 3 utilizadores e foi actualizado pela última vez há 12 anos, 11 meses por Anónimo.
-
AutorArtigos
-
-
10 de Fevereiro de 2012 às 16:29 #1041AlbinoParticipante
boas mais uma vez.
tenho uma folha onde uso uma macro para copiar dados de uma folha e cola-los numa outra para fins de arquivo.
essa macro copiava dados em coluna e colava-os em coluna da folha2 e ao código é este:sheets(“folha1”).select
range(“u11:u112”).selectselection.copy
sheets(“folha2l”).select
range(“b1”).select
if isempty(range(“b1”)) then
selection.pastespecial paste:=xlvalueselse
selection.end(xltoright).offset(1, 0).select
selection.pastespecial paste:=xlvalues
end ifeste código funciona bem para colagem em colunas, mas agora quero adaptá-lo a fazer a ccópia e colagem em linhas, para tal modifiquei o código para :
sheets(“oficio”).select
range(“u11:x12”).selectselection.copy
sheets(“control”).select
range(“a1”).select
if isempty(range(“a1”)) then
selection.pastespecial paste:=xlvalueselse
selection.end(xldown).offset(0, 0).select
selection.pastespecial paste:=xlvalues
end ifo problema é que cada vez que cola na folha2(control), cola na mesma linha que já tinha dados, substituindo-os, coisa que não me interessa.
o que pretendo é que grave na linha livre abaixo.
será que me falta alguma coisa?
obrigado. -
10 de Fevereiro de 2012 às 16:58 #1791jorgerodAdministrador
albino,
julgo que o teu problema tem a ver com a utilização da função offset. tu tens: selection.end(xldown).offset(0, 0).select
ora, assim sendo, não passa de linha nem de coluna.
abaixo mostro as opções de offset (embora em inglês), para melhor compreensão:
offset
the offset property is the one that you will use the most with range to move around the sheet.to move one cell down (from b2 to b3): range(“b2”).offset(1,0).select
to move one cell to the right (from b2 to c2): range(“b2”).offset(0,1).select
to move one cell up (from b2 to b1): range(“b2”).offset(-1,0).select
to move one cell to the left (from b2 to a2): range(“b2”).offset(0,-1).selectto move one cell down from the selected cell:
activecell.offset(1,0).selectas you notice the first argument between the parentheses for offset is the number of rows and the second one is the number of columns. so to move from a1 to g6 you will need:
range(“a1”).offset(5,6).selectyou will use very often the following piece of code . it selects a cell plus 4 more to the right to be copied/pasted somewhere else:
range(activecell,activecell.offset(0,4)).copy
notice the comma after the first activecell and the double closing parentheses before the copy.(retirado de: excel macros (vba)
for beginners, intermediate and advanced users – peter – http://www.excel-vba.com/index.htm) -
10 de Fevereiro de 2012 às 18:48 #1793jorgerodAdministrador
albino,
podes também ver, é claro que para outros fins, o post que criei em 2006 (no blog exceler): http://exceler.blogspot.com/2006/10/vba-propriedade-offset.html
fica bem.
-
10 de Fevereiro de 2012 às 18:59 #1794AlbinoParticipante
jorgerod
boas
se bem te lembras esse post fui eu que te pedi ajuda para fazer um pedido de material ness altura.aqui o que me complica a vida é o facto de ao colar na folha2 substituir o que já está lá escrito.
a solução supracitada cola os dados sempre no mesmo local, estou certo?a minha intensão é colare na linha vazia abaixo.
eu arranjei uma solução que utilizeihá uns tempos atrás que foi o seguintea b c
1 amelia 125468 58€
2 xpto
assim copioas duas linhas e quando vai colar na folha2 , substitui o xpto pela nova linha e fica o xpto pna linha abaixoespero ter me feito entender.
abraço
-
11 de Fevereiro de 2012 às 16:11 #1795jorgerodAdministrador
albino,
experimenta este segmento de código, julgo que, adaptando, dará o resultado que pretendes.
diz qq coisa, ok?
sub teste()
dim lastrow as long
sheets(“folha1”).select
range(“u11:x12”).selectselection.copy
sheets(“folha2”).select
range(“a1”).select
if isempty(range(“a1”)) then
selection.pastespecial paste:=xlvalueselse
lastrow = sheets(“folha2”).range(“a65536”).end(xlup).row ‘
msgbox lastrow ‘
range(“a” & lastrow).offset(1, 0).select ‘
selection.pastespecial paste:=xlvaluesend if
end sub
relacionado com este assunto, podes ver muito mais e, talvez melhor, em:
fica bem.
-
11 de Fevereiro de 2012 às 22:31 #1796AnónimoInactivo
albino eu faria o seguinte sem complicar:
sheets(“oficio”).select
range(“u11:x12”).copysheets(“control”).select
range(“a1048576”).end(xlup).offset(1).pastespecial xlpastevaluescom esta ultima linha de código não necessitamos testar se a ultima linha está vazia, por defeito ele faz isso mesmo.
ainda podemos ir mais longe reduzindo o procedimento para duas linhas apenas:
sheets(“oficio”).range(“u11:x12”).copy
sheets(“control”).range(“a1048576”).end(xlup).offset(1).pastespecial xlpastevaluessó falta a cereja no topo do bolo:
application.cutcopymode = false
vg-excel-gest
victor gamboa -
12 de Fevereiro de 2012 às 2:42 #1042AlbinoParticipante
jorgerod
e
vg-excel-gestobrigados mais ma vez as duas soluções funcionam na perfeição
abraço
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.