- Este tópico contém 12 respostas, 2 utilizadores e foi actualizado pela última vez há 12 anos, 9 meses por Albino.
-
AutorArtigos
-
-
3 de Abril de 2012 às 1:46 #1061AlbinoParticipante
boas.
numa folha, tenho celulas que vão buscar dados a outras, no entanto tenho necessidade de quando alterar determinada celula, por ex mudar o texto que ela contem as celulas que lhe estão ligadas sejam apagadas.
ex.
na celula c8 introduzo determinado texto e na celula c12 tenho uma validação de dados que vai beber a uma tabela de acordo com o que estiver escrito em c8
o meu ituito é que, quando eu mudar o nome de c8 as celulas c12 e mais 4, fiquem a zerotenho este código que tirei da net , mas não me está a dar os resultados esperados
private sub worksheet_change(byval target as range)
if target.address = “$c$8” then
application.enableevents = false
[c12,n20,y20,aj20].clearcontents
application.enableevents = true
end if
end subobrigado
-
3 de Abril de 2012 às 21:33 #1841jorgerodAdministrador
albino,
onde é que colocaste o código? foi na própria worksheet ou foi num módulo? se foi num módulo, não vai dar, mas, como experimentei, se for no código da própria worksheet, sempre que alterares o conteúdo da célula c8, aqs células que mencionaste são imediatamente apagadas.
fica bem e diz qq coisa, ok?
-
3 de Abril de 2012 às 22:57 #1842AlbinoParticipante
jorgerod
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
-
3 de Abril de 2012 às 23:04 #1843jorgerodAdministrador
podes colocar o ficheiro aqui? se não, podes mandar-me por e-mail. nda, como sempre…
-
4 de Abril de 2012 às 15:37 #1844jorgerodAdministrador
albino,
supondo que tens o range i14:k14 unido e centrado, talvez utilizando o seguinte código, te dê o resultado que pretendes:
private sub worksheet_change(byval target as range)
if target.address = “$c$8” then
application.enableevents = false
range(“i14”).mergearea.clearcontents
application.enableevents = true
end if
end subexperimenta e diz qq coisa, ok?
fica bem.
-
5 de Abril de 2012 às 2:43 #1845AlbinoParticipante
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.
obrigado -
5 de Abril de 2012 às 18:12 #1846jorgerodAdministrador
boas, albino,
experimenta, adaptando à s tuas necessidades e depois diz qq coisa, ok?
fica bem.
código:
private sub worksheet_change(byval target as range)
dim cll as range, mergeaddress as string
if range(“ae9”) “” then
msgbox “rectifique os campos” + chr$(13) & “procedimentos, quant.,ajudante, anestesista.”, vbokonly, “atenção”
end if
if target.address = “$ae$9” then
application.enableevents = false
for each cll in sheets(1).range(“c12, j17, n20, y20, aj20”).cells
mergeaddress = cll.mergearea.address(0, 0)
cll.mergecells = false
cll.clearcontents
range(mergeaddress).mergecells = true
next cllapplication.enableevents = true
end if
end sub
-
6 de Abril de 2012 às 11:49 #1847AlbinoParticipante
olá jorgerod
não funciona.
posso mandar por email no entanto não encontro o teu endreço.
podes mandar para o meu
perdido34@gmail.com
depois envio-te o raio do ficheiro. grrr
o brigado e boa páscoa
abraço
albino -
7 de Abril de 2012 às 21:25 #1848jorgerodAdministrador
albino,
para efectuar o clearcontents de células unidas (merged) – no exemplo c9=c9:h9, j9=j9:ac9, etc -, há, para além do código que já está aqui publicado, um outro segmento, que dará o mesmo resultado e é bem mais condensado:
for each cell in sheets(1).range(“c9, j9, c12, j17, n20, y20, aj20”).cells
cell.mergearea.clearcontents
next cellexperimenta e diz qq coisa.
fica bem.
-
9 de Abril de 2012 às 16:53 #1849AlbinoParticipante
boas.
jorgerodlá consegui adaptar o código para fazer o que eu pretendia, no entanto por vezes não executa.
tenho de fechar o ficheiro gravar e voltar a abrir e, aí já funciona novamente.ficou assim:
private sub worksheet_change(byval target as range)
application.enableevents = false
‘ o prtendido é que ao modificar a celula ae9 todas as outras mencionadas sejam limpas
if target.address = “$ae$9” then
application.enableevents = falsefor each cell in sheets(1).range(“c12, j17, n20, y20, aj20”).cells
cell.mergearea.clearcontents
next cell
end ifapplication.enableevents = true
end sub
abraço
albino -
9 de Abril de 2012 às 23:13 #1850jorgerodAdministrador
-
10 de Abril de 2012 às 23:23 #1851AlbinoParticipante
boas
jorgerod
experimentei das duas formas, com o enableevents e sem o mesmo, no entanto por vezes, não segue as instruções e não apaga as celulas em questão.
o trabalho que dá, é só fechar o ficheiro guardar e voltar a abrir e aí já funciona.
não consegui descobrir em que situação é que ele emperra, mas para já funciona.uma outra questão, neste mesmo ficheiro tenho algumas listas pendentes, o que acontece é, quando activo a celula onde elas estão colocadas aparecem-me sempre em primeiro lugar as linhas em branco que essas listas têm.
não há maneira de por defeito e, se essa celula estiver em branco, quando eu clicar na lista me devolver a primeira linha (supostamente a que contem o 1º nome da lista) dessa mesma lista e não uma em branco?
mesmo marcando a caixa de “ignorara lcelulas em branco”, ao activar a lista devolve uma linha em branco.desculpa lá ser chato.
abraço
albino -
11 de Abril de 2012 às 0:34 #1062jorgerodAdministrador
albino,
podes tentar criar uma lista dinãmica e, na coluna onde tens os nomes, efectuares a ordenação de a-z ou de z-a. assim, as células em branco nem sequer aparecem na lista.
exemplo de lista dinâmica:
supõe que tens uma lista de nomes na coluna a e queres a lista pendente em f1. então, nesta célula, digitas, na origem da validação de dados (lista), o seguinte: =deslocamento($a$1;0;0;contar.val($a:$a);1)
agora, supõe que, na coluna a, tens os nomes de a1:a6. se fores a f1, verás a lista pendente. depois, apagas um nome na coluna a e, clicando nessa coluna a, ordenas de a-z ou de z-a. depois, vais à lista pendente e verás que não tens nenhuma célula em branco.
será isto que pretendes?
fica bem e diz qq coisa.
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.