- Este tópico contém 7 respostas, 2 utilizadores e foi actualizado pela última vez há 12 anos, 9 meses por Anónimo.
-
AutorArtigos
-
-
13 de Fevereiro de 2012 às 4:24 #1043AlbinoParticipante
boas.
haverá alguma forma de fazer com que a data assumida numa celula com a formula hoje(), não se altere no dia seguinte para esse dia.tenho nas celulas da coluna b a seguinte formula
=se(a5=”pago”;hoje();””)
o que pretendo é que depois de a condição ser verdadeira essa data não se altere, isto é fique sempre nessa celula.
obrigado -
13 de Fevereiro de 2012 às 11:56 #1797AnónimoInactivo
bom dia albino,
também já tive este problema e a melhor solução que encontrei foi esta que vai no ficheiro, adapta à tua medida.
esquece a formula com a data de hoje, com formulas já mais conseguiras manter a data de hoje no mesmo dia, pelo menos que eu saiba.
deverás utilizar o evento worksheet_change da seguinte forma:
private sub worksheet_change(byval target as excel.range)
application.enableevents = false
if target.column = 1 then range(“$b$” & target.row).value = date
application.enableevents = true
end sub
[attachment]c:fakepathtravar data volatil.xlsm[/attachment]
este procedimento encontrei-o algures na net já algum tempo, também o uso numa situação parecida.
vg-excel-gest
victor gamboa -
13 de Fevereiro de 2012 às 12:03 #1798AnónimoInactivo
-
14 de Fevereiro de 2012 às 1:36 #1799AlbinoParticipante
olá 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
-
14 de Fevereiro de 2012 às 21:52 #1804AnónimoInactivo
boa noite albino,
a solução que apresentei era apenas um exemplo básico que não tinha nada haver com a tua especificidade, que deverias ter aproveitado para adaptar mas no entanto como copiei o código directamente da fonte adaptai-o devidamente, aproveitando as referencias do teu exemplo, portanto deverá funcionar na tua folha de cálculo automaticamente sem recurso a botões.
private sub worksheet_change(byval target as excel.range)
if target.column = 6 and range(“$f$” & target.row) = “pago” then range(“$g$” & target.row).value = date
end sub
e mais uma vez apenas com uma linha de código conseguimos o nosso objectivo, não esqueças de colar este procedimento no módulo privado da folha que pretendes que ele funcione, tal como está no exemplo que se anexa, ok.
deverás testar primeiro no exemplo que anexo.
vg-excel-gest
victor gamboa
Travardatavolatil2.zip -
15 de Fevereiro de 2012 às 17:28 #1805AlbinoParticipante
olá 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?
-
15 de Fevereiro de 2012 às 23:00 #1806AnónimoInactivo
olá albino,
mais um truque:
se quiseres que o procedimento funcione sem te preocupares com maiúsculas e minúsculas, terás de fazer esta declaração inicial:
option compare text
ou seja:
option compare text
private sub worksheet_change(byval target as excel.range)
if target.column = 6 and range(“$f$” & target.row) = “pago” then range(“$g$” & target.row).value = date
end sub
a partir de agora no procedimento ou na folha podes por pago, pago, pago, pago, etc… que vai funcionar sempre.
quanto a leituras vou ver o que melhor te posso aconselhar para aprender as bases do vba e depois digo-te.
-
16 de Fevereiro de 2012 às 2:30 #1044AlbinoParticipante
olá victor
5 estrelas
obrigado
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.