Respostas criadas no fórum
-
AutorArtigos
-
AlbinoParticipante
boas
jorgerodfuncionou, mas em parte.
passo a explicar se a s celulas a serem apagadas forem só só uma range c12:n12 funciona bem, quando adiciono novas ranges já não funciona.
devolve o erro “”aplication-defined or object-defined erroras ranges em questão serão: c12:n12 – j17:l17 – n20:w20 – y20:ah20 – aj20:ar20
private sub worksheet_change(byval target as range)
if target.address = “$ae$9” then
application.enableevents = false
range(“c12,j17,n20,y20,aj20”).mergearea.clearcontents
application.enableevents = true
end ifend sub
se eu quiser introduzir uma caixa de indformação tipo
msgbox “rectifique os campos” + chr$(13) & “procedimentos, quant.,ajudante, anestesista.”, vbokonly, “atenção”
mas só quero que aparece se a celula ae9 estiver com dados caso contrario se ela estiver vazia não aparecer.
eu já consegui que funcionasse, mas aparecia sempre que clicava na celula ae9.ps: se não conseguires, mando-te por mail o ficheiro.
obrigadoAlbinoParticipantejorgerod
boas
o código está colocado numa worksheet, tem outra instrução antes dele, mas penso que não fará diferença.
o eero que me devolve a primeira vez que tento alterar a celula é :
run_time error 1004
não é possivel alterar uma parte de uma celula unida.É certo que as celulas a tentar alterar resultam de uma união c12:n12 j17:l17 n20:w20 y20:ah20 e aj20:ar20.
acontece que em outros ficheiro que já criei bastava informar da primeira celula unida e a coisa funcionava.
tentei alterar para
[c12:n12].clearcontents e nada, surgiu o mesmo erro,no entanto só surge a primeira vez que tento efectuar a alteração da celula em questão, após clicar em “debug” fica a linha sublinhada a amarelo, se tentar varias vezes as celulas não são apagadas e não devolve o erro.obrigado
AlbinoParticipanteolá jorgerod
como sempre a coisa funcionou, no entanto fiz uma pequena adaptação, uma vez que o meu interesse era só verificar algumas celulas e não todas.
coloquei também a indicação para terminar o sub caso houvesse celulas em branco.
ficou assim:private sub commandbutton1_click()
‘verificar preenchimento
dim c as range
for each c in worksheets(“folha1”).range(“e3,e5,e9,j11,j13,q13,x13”).cells ‘modifiquei a range das celulas que me interessava verificar
if c.value = “” then
msgbox “É favor preencher a celula em falta:” & ” ” & c.address, vbinformation, “atenção!!!”exit sub ‘acrescentei aqui
end ifnext
‘copiar para folha2
sheets(“folha1”).range(“ad3:as3”).copy
sheets(“folha2”).range(“a1048576”).end(xlup).offset(1).pastespecial xlpastevaluesapplication.cutcopymode = false
sheets(“folha1”).select‘apagar entradas
range(“e3,e5:h5,e9:f9,e7:f7,e11,j11,j13:k13,q13:s13,x13:y13”).select
range(“e3”).activate
selection.clearcontentsend sub
ps: já agora será que se poderá alterar o codigo no onde tem instruções para copiar e colar na folha2, onde diz … [.range(“a1048576”)…], segundo o que me parece faz a verificação até á celula a1048576.
obrigado
AlbinoParticipanteboas.
victor
agradeço a tua apreciação e comentários e, como referias, não me importo nada de poder-mos desenvolver o tal projecto.
tens de ter em atenção que sou principiante nestas lides.já agora e seguindo as indicações do jorgerod, elaborei uma folha nova para o meu proposito aplicando a função procv e outras.
ficou com melhor aspecto, no entanto a coisa trava sempre cada vez que quero aplicar instruções em vba.
no caso concreto queria criar uma macro que:
– verifique os campo a preencher e dar alerta para tal
– copiara informação para folha2
– apagar as entradas para ficar livre para a proxima e assim não haver erro de preenchimentoa macro que adaptei anexada ao commandbotton:
devolve um erro “run-time 424” object required
uma das vezes que funcionou colou 5 vezes a mesma informação na folha2private sub commandbutton1_click()
‘vericar preenchimento dos campos
dim r as range, cell as range
ary = array(range(“e3:e15”), range(“j7:j15”), range(“o7:o7”), range(“o11:o11”), range(“q13:q15”), (“x13:x15”))
for i = lbound(ary) to ubound(ary)
for each cell in ary(i)if cell.value = “” then
msgbox “preencha todos os campos.”, vbokonly, (“atenção”)
exit subend if
next
next
‘copiar para folha2
sheets(“folha1”).range(“ad3:as3”).copy
sheets(“folha2”).range(“a1048576”).end(xlup).offset(1).pastespecial xlpastevaluesapplication.cutcopymode = false
sheets(“folha1”).select‘apagar entradas
sheets(“folha1”).range (“e3”), range(“e5”), range(“e7”), (“e11”), range(“j11”), range(“j13”), range(“q13”), range(“x13”).select
clearcontents.selectend sub
obrigado
albinoAlbinoParticipanteolá
vou tentar se consigo algo a função procv no entanto envio o ficheiro que ando a tentar criar.
agradecia uma apreciação/opinião, principalmente na folha2 onde pretendo criar formulário em vba.
obrigado.
CalculoOrdenado.zip16 de Fevereiro de 2012 às 2:30 em resposta a: Data da formula Hoje() não mudar após introdução #1044AlbinoParticipanteolá victor
5 estrelas
obrigado
15 de Fevereiro de 2012 às 17:28 em resposta a: Data da formula Hoje() não mudar após introdução #1805AlbinoParticipanteolá victor
funciona bem.
só alterei a palavra “pago” para minusculas uma vez que a formatação da celula tem um tipo de letra que aparece sempre em maiusculas. senão obrigava -me a escrever sempre a 1ª letra em maiuscula.de resto está expectacular.
obrigado.ps: que leitura me aconselhas para aprender/progredir mais no vba?
14 de Fevereiro de 2012 às 1:36 em resposta a: Data da formula Hoje() não mudar após introdução #1799AlbinoParticipanteolá vg
obrigado, a tua solução funciona, no entanto qualquer que seja a entrada na celula, vai escrever a data na outra.eu adaptei outra solução um pouco mais complexa, mas que para o meu caso tráz vantagens pois a celula do “if” contem sempre dados.
o que eu pretendo é que só escreve a data quando a celula tiver detrminado valor, que no meu caso é a palavra “pago”este código tem uma desvantagem que é ter de ser activada por botão de comando, portanto não faz a introdução automáticamente o que seria o ideal.
haverá forma de adaptar o código para efectuar isso?ou então adaptar o teu código para que só edite a celula quando a outra tenha detrminado valor?
eis o código que usei:
sub fixadata()
activesheet.unprotect
for linha = 1 to 100if range(“f” & linha).value = “pago” then
application.enableevents = false
range(“i1”).select ‘ celula a ser copiada onde esta a formula hoje()
selection.copy
range(“g” & linha).select ‘ celula de destino
selection.pastespecial paste:=xlpastevalues, operation:=xlnone, skipblanks _
:=false, transpose:=false
application.cutcopymode = false
end ifnext linha
activesheet.protectend sub
obrigado
AlbinoParticipantejorgerod
e
vg-excel-gestobrigados mais ma vez as duas soluções funcionam na perfeição
abraço
AlbinoParticipantejorgerod
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
8 de Fevereiro de 2012 às 2:35 em resposta a: Localização de numeros dentro de uma faixa de valo #1038AlbinoParticipanteolá emerson
se eu entendi o que querias penso que poderás fazer o seguinte:
para calcular quantos celulas têm valor superior a 20 podes aplicar esta formula
=contar.se.s(a1:b8;”>=20″) , em que “a1:b8” será o intervalo de introdução de dados.
para destacar as cellulas que contenham valores superiores a 20, podes usar a formatação condicional.
em excel 2007seleccionar o intervalo de introdução dos dados. de seguida ir a :
separador “base” –> estilos –> formatação condicional –> nova regra –>formatar apenas celulas que contenham–>vlor da celula–>escolher “maior ou igual a ” onde diz “situa-se entre” –> colocar o nº que pretendes –> scolher a formatação desajada no botão “formatar”diz qq coisa
abraçoAlbinoParticipanteolá jorgerod
então aqui vai o código que alterei e que agora estáa funcionar como quero.sub imprimir()
‘
‘ verifica preenchimentos dos campos
‘
dim r as range, cell as range
ary = array(range(“f10:f12”), range(“g12:g12”), range(“c22:c22”), range(“e22:e22”), range(“e24:e28”))
for i = lbound(ary) to ubound(ary)
for each cell in ary(i)
if cell.value = “” then
msgbox “preencha todos os campos.”, vbokonly, (“atenção”)
exit sub
end if
next
next‘imprime folha
‘
range(“a1:l49”).select‘substitui esta linha pela que está em baixo uma vez que me premite escolher o nº de cópias
activewindow.selectedsheets.printout copies:=1
‘executeexcel4macro “print(1,,,1,,,,,,,,2,,,true,,false)”‘mudar numeração para seguinte
range(“c17”).value = range(“c17”) + 1‘coloca a folha na posição adequada para a proxima edição
range(“f10”).select
activewindow.smallscroll down:=8end sub
abraço…
AlbinoParticipanteops.
está resolvido.
coloquei o exit sub antes de end ifobrigado
AlbinoParticipanteolá jorgerod
em termos de verificação funcionou, no entanto por cada campo que não estava preenchido repetia a msgbox.
não havia grande problema, mas o pior é que depois não executa o resto do código, que é a impressão.
portanto pára no exit sub e não vança para as instruções seguintes.
tentei retirar esse exit sub, mas depois da verificação e das mgsbox, faz a impressão mesmo não tendo tudo preenchido e isso não me interessa.
o código todo será :
sub imprimir()
‘
‘ verifica preenchimentos dos campos
‘
dim r as range, cell as range
ary = array(range(“f10:f12”), range(“g12:g12”), range(“c22:c22”), range(“e22:e22”), range(“e24:e28”))
for i = lbound(ary) to ubound(ary)
for each cell in ary(i)
if cell.value = “” then
msgbox “preencha todos os campos.”, vbokonly, (“atenção”)
end if
next
next
exit sub‘imprime folha
‘
range(“a1:l49”).selectexecuteexcel4macro “print(1,,,1,,,,,,,,2,,,true,,false)”
range(“f7”).select‘mudar numeração para seguinte
range(“c17”).value = range(“c17”) + 1end sub
AlbinoParticipanteboas vg-excel-gest
está maravilha, obrigadissimo. 😉
a unica coisa que alterei foi a referência absolutas para uma relativa.
=procurar(“sa”;g$1;1)>0
e
=procurar(“d”;g$1;1)>0cpts
albino :woohoo: -
AutorArtigos