- Este tópico contém 5 respostas, 2 utilizadores e foi actualizado pela última vez há 14 anos, 2 meses por oreste.jr.
-
AutorArtigos
-
-
28 de Novembro de 2010 às 22:59 #889oreste.jrMembro
colegas, gostaria de saber se alguém do forum poderia me ajudar com esta questão.
criei segundo código abaixo, uma macro para filtrar numa coluna, dados diferente “0” e ocultar colunas num determinado intervalo que possuam valores diferente oa valor contido na célula fg3.
o que eu gostaria era de encontrar uma forma de acionar este código logo que digitasse o valor em fg3 e acionar enter ( ou clicar fora de fg3.
como fazê-lo?sub ocultacase()
‘ filtrar dados dierentes de 0 na coluna fe.
activesheet.range(“$fe$4:$fe$43″).autofilter field:=1, criteria1:=”0”, _
operator:=xland‘ oculta as colunas que não possuem o mês referenciado na célula fg3.
svalor = range(“fg3”)
select case svalor
case “11/10”
columns(“d:ah”).hidden = false
columns(“ai:fd”).hidden = truecase “12/10”
columns(“ai:bl”).hidden = false
columns(“d:ah”).hidden = true
columns(“bm:fd”).hidden = truecase “01/11”
columns(“bm:cq”).hidden = false
columns(“d:bl”).hidden = true
columns(“cr:fd”).hidden = truecase “02/11”
columns(“cr:dv”).hidden = false
columns(“d:cq”).hidden = true
columns(“dw:fd”).hidden = truecase “03/11”
columns(“dw:ex”).hidden = false
columns(“d:dv”).hidden = true
columns(“ey:fd”).hidden = true
case “04/11”
columns(“ey:fd”).hidden = false
columns(“d:ex”).hidden = truecase else
msgbox “nenhuma das alternativas”end select
end sub
-
28 de Novembro de 2010 às 23:27 #1487jorgerodAdministrador
podes, talvez, utilizar o evento worksheet_change().
mais ou menos isto:
private sub worksheet_change(byval target as range)
if target.address = “$fg$3” then
end if
end sub -
29 de Novembro de 2010 às 1:55 #1488oreste.jrMembro
valeu jorge.
amanhã farei algumas tentativas.
aproveitando seu apoio: será que eu não poderia usar uma evento para chamar minha macro?
por exemplo:private sub worksheet_change(byval target as range)
if target.address = “fe2” then
application.enableevents = false
call ocultacase () ‘ chama a sua macro
application.enableevents = true
end if
end subestou tentando só que não está funcionando.
na minha linha de código as “()” da ocultacase (minha macro) não aparecem.muito obrigado pela sua mensagem e até breve.
-
29 de Novembro de 2010 às 2:02 #1489jorgerodAdministrador
não se pode chamar uma macro como está a ser feito.
o modo correcto é: call ocultacase
isto é, sem os parentesis ().
de qualquer modo, não experimentei nada, apenas dei uma dica.
experimenta e depois de veres o resultado, diz qq coisa, ok?
-
29 de Novembro de 2010 às 14:34 #1490oreste.jrMembro
e aí colega? sua sugestão foi infalível.
jorge, antes de postar o código, gostaria que me esclarecesse umas dúvidas. É possível trabalhar somente vba sem a criação de macros? É que macros as vêzes é um pouco problemático.
o cód. funcionou blz, só que, ao abrir o arquivo, a mensagem para habilitar macro ainda continua.
me desculpe se pareço uma pouco leigo, mas é que sou mesmo.
caso possa me indicar algum material que define as diferenças quanto a trabalhar com macros ou vba somente eu agradeço.
///////private sub worksheet_change(byval target as range)
if target.address = “fe2” then
‘após digitar uma nova data em fe2 (tipo: 10/10, 11/10…) e teclar “enter”,
‘oculta todas as colunas com valores diferentes de fe2 no intervalo: d:fd.elseif range(“fe2”).value = “11/10” then
columns(“d:ah”).hidden = false
columns(“ai:fd”).hidden = true
elseif range(“fe2”).value = “12/10” then
columns(“ai:bl”).hidden = false
columns(“d:ah”).hidden = true
columns(“bm:fd”).hidden = true
elseif range(“fe2”).value = “01/11” then
columns(“bm:cq”).hidden = false
columns(“d:bl”).hidden = true
columns(“cr:fd”).hidden = true
elseif range(“fe2”).value = “02/11” then
columns(“cr:dv”).hidden = false
columns(“d:cq”).hidden = true
columns(“dw:fd”).hidden = true
elseif range(“fe2”).value = “03/11” then
columns(“dw:ex”).hidden = false
columns(“d:dv”).hidden = true
columns(“ey:fd”).hidden = true
elseif range(“fe2”).value = “04/11” then
columns(“ey:fd”).hidden = false
columns(“d:ex”).hidden = true
else
msgbox “esta data é inválida”end if
‘filtra valores diferentes de “0” no intervalo fe4:fe43
activesheet.range(“$fe$4:$fe$43″).autofilter field:=1, criteria1:=”0”, _
operator:=xland
end sub -
29 de Novembro de 2010 às 16:34 #890jorgerodAdministrador
boas, oreste!!!
ainda bem que deu certo b)
quanto às perguntas:
1 – “o cód. funcionou blz, só que, ao abrir o arquivo, a mensagem para habilitar macro ainda continua.”
para isto não acontecer:
excel 2007:
- clicar no botão do office
- clicar em opções do excel
- escolher “centro de fidedignidade”
- escolher “definições das macros”
- clicar em activar todas as macros
- nas definições de macros de programador, marcar “acesso fidedigno…”
excel 2010:
- clicar em ficheiro
- escolher “centro de fidedignidade”
- escolher “definições das macros”
- clicar em activar todas as macros
- nas definições de macros de programador, marcar “acesso fidedigno…”
2 – “É possível trabalhar somente vba sem a criação de macros? É que macros as vêzes é um pouco problemático.”
sim, é possível. as macros são escritas e gravadas a partir do registo de criação de macros do excel. o código vba (visual basic for applications)é escrito manualmente através de programação. mas, no fundo e em termos de código, as macros também contêm vba.
para teres uma melhor percepção do que é vba, podes aceder ao link: http://www.thermexcel.com/english/divers/forum.htm
embora esteja em inglês, está lá tudo o que interessa saber sobre a matéria.
fica bem.
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.