Página 1 de 1

Escrever e apagar dados em Worksheet protegida

Enviado: 19 Abr 2021 às 13:32
por JCabral
Boa tarde

Preciso de ajuda para o seguinte:
Tenho a Planilha "DATA" que está protegida do seguinte modo :
Código: Selecionar todos
ws.Protect Password:="123", UserInterFaceOnly:=True
de modo a permitir escrever dados via VBA.
O que de momento acontece é que eu consigo escrever dados, só na linha 7 e entre as colunas G e Z.
Ao fazer Double_Click no range que acima refiro aparece uma Userform com uma ListBox contendo os dados disponíveis que posso escolher.

Ao escolher da ListBox um valor ele escreve na respetiva célula e tb adiciona na tab "SETTINGS" o valor e a data, às colunas R e S.

Até aqui tudo, quase, bem, já que me aparece a mensagem de erro de estar a escrever numa célula protegida e gostaria que isso não acontecesse. O que não estou a conseguir é apagar um dado do Range("G7:Z7") e consequente também da tab "SETTINGS".

Ou seja se por algum motivo me enganar como faço para apagar o valor da tab DATA e da tab SETTINGS, já que a planilha está protegida?

Obrigado
Jorge

Re: Escrever e apagar dados em Worksheet protegida

Enviado: 19 Abr 2021 às 15:57
por CursoDeExcelGratis
no VBA vc poderia dar um unprotect, alterar o que vc quiser, e dar um protect novamente.
Eu fiz algo parecido para atualizar uma tabela dinâmica protegida via VBA neste video :
https://www.youtube.com/watch?v=_w2UePw1z6k

Re: Escrever e apagar dados em Worksheet protegida

Enviado: 19 Abr 2021 às 18:33
por JCabral
@CursoDeExcelGratis,

Mas gostaria que isso acontecesse apenas quando faço o "delete" em qualquer célula do Range("G7:Z7") e que quando introduzo o valor da ListBox não dê erro

Re: Escrever e apagar dados em Worksheet protegida

Enviado: 19 Abr 2021 às 20:18
por CursoDeExcelGratis
oi, boa noite, acredito que consegui o que vc precisa, vou explicar abaixo detalhadamento.
nas macros, onde eu alterei coloquei o comentário 'curso de excel gratis para vc achar mais fácil.

Os dois problemas foram bem complicados de resolver !
Para o Delete funcionar mesmo com a tabela protegida eu usei o onKey.

Esse onKey é muito legal, vou usar ele para fazer aquele jogo de snake no excel nos meus videos do youtube.

O que ele faz ? ele pega uma tecla pressionada e substitui por uma chamada de macro, o que eu não sabia é que ele fazia isso na planilha protegida também, então foi bem legal descubrir isso.
E outra coisa que eu não sabia é que dava para passar parâmetros para a macro, neste caso tive que passar a linha e coluna que quero apagar.

Fiz da seguinte forma, no evento selection change coloquei isto :


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'curso de excel gratis
If Target.Column >= 4 And Target.Column <= 23 And Target.row = 7 Then 'verifica que esteja na faixa cinza de células
'associa o delete a macro deletevalue, nessa macro eu desprotego a célula antes de deletar
Application.OnKey "{DELETE}", "'DeleteValue """ & Target.row & """ , """ & Target.Column & """'"
Else
'volta o uso normal do delete
Call Application.OnKey("{DELETE}")

End If
End Sub

esse jeito maluco de chamar o on key é para passar os parâmetros, uma outra forma poderia ter sido criando variaveis globais com a linha e a coluna, também daria certo. ( Achei aqui como passar parâmetros no on key https://excelfox.com/forum/showthread.p ... -Parameter )

e na macro deletevalue basicamente é isto

Public Sub DeleteValue(ByVal row As Integer, ByVal col As Integer)
'curso de excel gratis
'
DesprotegerData
Cells(row, col).ClearContents
protegerData

End Sub

Tem essas duas subs de proteger e desproteger para poder organizar o código.

Isso resolveu o delete, para resolver o outro, foi um pouco mais chato, pois não entendia pq dava o erro, então tive a ideia de desproteger totalmente a planilha e ver o que acontecia.

Você está chamado o form dentro do evento Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Antes do double click, o que acontece é que depois que abre o form, e o usuário seleciona o valor e vc fecha o form, vc ainda está dentro do evento beforedoubleclick , então ele vai finalizar o evento e vai ficar no modo de edição de célula, so que como protegemos a célula antes de fechar o form, ele da o erro.
O segredo é "cancelar" o evento beforedoubleclick antes dele terminar, para fazer isso vc coloca no final
Cancel = true
com isso o cursor não fica mais piscando no final e não da o erro mesmo depois de bloquear.

Re: Escrever e apagar dados em Worksheet protegida

Enviado: 20 Abr 2021 às 10:26
por JCabral
Quando apago no Range("G7:Z7"), nada acontece na aba DATA e devia apagar lá também

Re: Escrever e apagar dados em Worksheet protegida

Enviado: 20 Abr 2021 às 16:22
por CursoDeExcelGratis
vc quer selecionar o range todo e limpar todas as células de uma vez, correto ?

Re: Escrever e apagar dados em Worksheet protegida

Enviado: 20 Abr 2021 às 16:26
por CursoDeExcelGratis
neste caso, como não da para passar um range inteiro por parametro ( eu acho, talvez até de ... ) eu criei uma variável global e uso essa variável para limpar tudo, o ideal seria ter removido os parametros da função visto que não vamos usar mais.

segue anexo a planilha atualizada