- Este tópico contém 11 respostas, 2 utilizadores e foi actualizado pela última vez há 14 anos, 9 meses por pmonica.
-
AutorArtigos
-
-
11 de Abril de 2010 às 2:04 #843pmonicaParticipante
jorge,
há uns tempos atrás forneceste-me um código (1º abaixo) para repetir uma macro mediante o aparecimento de uma variável numa dada coluna.
tentei agora adaptar o mesmo código para executar uma macro em determinadas linhas de uma coluna ou em determinadas colunas de uma linhaas vezes que “a66″ tem de valor e não me está a funceminar!
estou a “emburrar” ou falta-me algum comando?
_______________________________________________________________
dim vnum, linhas as long
vnum = 0
for linhas = 1 to 5000
if range(“d” & linhas).value = range(“n8”).value then ‘n8 é a variável a procurar e d a coluna de procura
vnum = vnum + 1
range(“o8”).value = vnum
range(“l” & linhas).select
if range(“i” & linhas).value 3 then ‘condição pretendida na altura
application.run “repete”
end if
end if
next___________________________________________________________
para colunasdim vnum, columns as long, lin as string
vnum = range(“a66”).value
lin = activecell.row
for columns = 7 to 18 in lin ‘ coluna g a r
application.run “valor”
next
___________________________________________________________
para linhasdim vnum, rows as long, col as string
vnum = range(“a66”).value
col = activecell.column
for rows = 10 to 20 in col’ linhas pretendidas
application.run “valor”
next
___________________________________________________________ -
12 de Abril de 2010 às 21:39 #1419jorgerodAdministrador
paulo,
tens que indicar a condição: se vnum for diferente de 0 ou se for célula vazia, então executa a macro, caso contrário, não executa.
falta-te o if ….. then…. end if…
-
12 de Abril de 2010 às 22:22 #1420pmonicaParticipante
:silly: :silly: :silly: :silly: Óbvio!
o único problema é que a macro é corrida tantas vezes quantas linhas ou colunas estão definidas e não o nº de vezes determinado no vnum (“a66”), como é que limito o número de vezes que a macro é executada ao valor vnum?
gracias
p.mónica -
12 de Abril de 2010 às 22:52 #1421pmonicaParticipante
solução da macro ser repetida o nº de vezes do inum resolvi, adicionando vnum = vnum – 1.
o problema agora está descrito a azul abaixo…
——————————————————————–
sub linha_pro_lado()
dim vnum, linhas as long, lin as string
vnum = range(“a66”).value
lin = activecell.row
for linhas = 7 to 18 ‘se não estiver na coluna g (7) a macro começa a ser executada na coluna onde estiver!!
if vnum 0 then
msgbox “valor – ” & activecell.value
activecell.offset(1, 0).select
vnum = vnum – 1
end if
next
end sub
———————————————————————
sub coluna_pra_baixo()
dim vnum, linhas as long, col as string
vnum = range(“a66”).value
col = activecell.column
for linhas = 67 to 78 ‘se não estiver na linha 67 a macro começa a ser executada na linha onde estiver!!
if vnum 0 then
msgbox “valor – ” & activecell.value
activecell.offset(0, 1).select
vnum = vnum – 1
end if
next
end sub
——————————————————————— -
12 de Abril de 2010 às 22:53 #1422jorgerodAdministrador
paulo,
talvez:
for i= 1 to vnum
call macro
next i
-
14 de Abril de 2010 às 22:26 #1424pmonicaParticipante
repetição do post anterior:
“solução da macro ser repetida o nº de vezes do inum resolvi, adicionando vnum = vnum – 1.
o problema agora está descrito a azul abaixo…
——————————————————————–
sub linha_pro_lado()
dim vnum, linhas as long, lin as string
vnum = range(“a66”).value
lin = activecell.row
for linhas = 7 to 18 ‘se não estiver na coluna g (7) a macro começa a ser executada na coluna onde estiver!!
if vnum 0 then
msgbox “valor – ” & activecell.value
activecell.offset(1, 0).select
vnum = vnum – 1
end if
next
end sub
———————————————————————
sub coluna_pra_baixo()
dim vnum, linhas as long, col as string
vnum = range(“a66”).value
col = activecell.column
for linhas = 67 to 78 ‘se não estiver na linha 67 a macro começa a ser executada na linha onde estiver!!
if vnum 0 then
msgbox “valor – ” & activecell.value
activecell.offset(0, 1).select
vnum = vnum – 1
end if
next
end sub
———————————————————————“ -
15 de Abril de 2010 às 21:41 #1425jorgerodAdministrador
paulo,
não podes dar o comando para ir para uma célula da linha 67, como condição para executar a macro ou o segmento de código?
-
15 de Abril de 2010 às 21:50 #1426pmonicaParticipante
boas jorge,
não, porque dei o exemplo da linha 67, mas pode ser a 79, 91, etc., mediante para que associado se está a emitir recibos!
dei a linha 67 só como exemplo. :blush: -
17 de Abril de 2010 às 22:46 #1429pmonicaParticipante
boas jorge,
consegues arranjar uma solução para a questão abaixo? :s :s :s :silly: :silly: :silly:
saudações.
paulo mónica -
19 de Abril de 2010 às 19:38 #1430jorgerodAdministrador
paulo,
talvez utilizando o método intersect:
exemplo:
if intersect(activecell, range(“a1:a10”)) is nothing then
msgbox “the active cell does not intersect a1:a10” -> aqui não colocavas código
else
msgbox “the active cell does intersect a1:a10” -> aqui colocavas o código para executar
end if
ou então:
private sub worksheet_change(byval target as range) –> utilizarias o evento worksheet_change
if not intersect(target, range(“a1:a10”)) is nothing then
msgbox “hello” –> aqui colocarias o teu código – nota: o range é aquele onde a msg aparece…
end if
end sub
vê se te serve, ok?
-
20 de Abril de 2010 às 22:01 #1431pmonicaParticipante
obrigado jorge,
o comportamento continua a ser o mesmo, aliás se a célula seleccionada não corresponder à linha 67 ou coluna g, pura e simplesmente não há acção nenhuma!
no entanto contornei o problema utilizando inputbox’s “type:=1” para indicar o nº de vezes que o código é repetido e “type:=8” para selecionar o “range” pretendido.gracias.
paulo mónica.
ps: não me esqueci de te enviar os userforms com condições para não correr o código se checkboxes, optionbuttons e textboxes não estiverem preenchidas. brevemente envio-te isso para o teu mail. -
22 de Abril de 2010 às 0:01 #844jorgerodAdministrador
ok, paulo.
fico à espera.
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.