![Proteja o conteúdo de determinadas células sem proteger a planilha](https://rvso.com/image/1497075/Proteja%20o%20conte%C3%BAdo%20de%20determinadas%20c%C3%A9lulas%20sem%20proteger%20a%20planilha.png)
Temos uma pasta de trabalho do Excel 2016 com várias guias, cada guia é dedicada a um vendedor específico. Cada vendedor, logins de um formulário e sua (somente a dele) planilha são desbloqueados e permitem edição.
Uma tabela está presente mostrando seus dados anteriores. Ele tem permissão para atualizar ou alterar a maioria dos seus dados na tabela. Ele atualiza células específicas, salva e fecha a pasta de trabalho. o processo de fechamento do wb, trava novamente sua planilha. Antes de sair, ele pode consultar outras planilhas de vendedores, mas não pode editá-las porque estão bloqueadas.
Agora o problema. Em cada uma das planilhas dos vendedores, certas colunas (as mesmas para todos os vendedores) contêm dados inseridos por um administrador. Esses dados devem ser vistos pelos vendedores, mas não devem ser alterados.
Qualquer ideia sobre como proteger determinadas colunas contra alterações de conteúdo existente em uma planilha desprotegida.
Responder1
Sem ver o código VBA, é difícil determinar como ocorre o bloqueio/desbloqueio. Presumo que isso seja feito definindo o locked
atributo para uma célula e usando o recurso de proteção e desproteção da planilha.
O que você precisa fazer é selecionar todas as vendas permitidas para edição e criar um intervalo personalizado para elas. Não tenho o Excel em mãos, mas acredito que seja Data
> Define Custom Range
No mesmo local você pode selecionar um intervalo, que selecionará automaticamente as células no Excel.
Alternativamente a trabalhar com intervalos personalizados, você pode selecionar as colunas necessárias, visto que os dados administrativos não estão na mesma coluna. Isso permitiria que um activesheet.range("K:L").select
fosse possível.
No código VBA, após desbloquear a planilha, deve-se selecionar este intervalo e alterar a locked
configuração dessas células, a seguir proteger a planilha novamente. O inverso deve ser feito ao sair (desproteger, definir tudo bloqueado, proteger).
Para descobrir o código VBA adequado, execute a ação manualmente enquanto grava em uma macro e copie o código.
Responder2
A LPChip me colocou no caminho certo e agradeço muito. O processo que usei é o seguinte:
- na planilha do vendedor, defina o atributo de bloqueio para toda a planilha como falso
- na mesa desse vendedor, defina o atributo de bloqueio da tabela completa como verdadeiro
- Criamos um intervalo customizado, conforme sugerido pelo LPChip, de todas as colunas que não foram editadas por ninguém. Fiz isso manualmente e atribuí um nome de intervalo (LockedColumns).
em seguida, proteja a planilha. Esta é a condição inicial para esta planilha e todas as outras planilhas de vendas.
O vendedor faz logon e, com as credenciais corretas, é levado para sua planilha, onde ocorre o seguinte no código vba nos bastidores:
- Selecionamos a tabela e definimos o lock attr como false
- Selecionamos Range.("LockedColumns").select e definimos o atributo de bloqueio como true
- Protegemos a planilha.
Isso permite que o vendedor autorizado insira dados nas células que permitimos e evita que ele altere os dados nas células nas quais não desejamos alterações. O vendedor pode consultar outras guias de vendas, mas não modificá-las. Quando o peep de vendas faz logoff ou a pasta de trabalho fecha, capturamos antes de fechar e no código vba, 1. selecione a tabela completa novamente, defina o atributo de bloqueio como verdadeiro e, em seguida, proteja a planilha. Salvamos e redirecionamos de volta para a guia do menu para o próximo usuário.
Fiquei perplexo e LP abriu meus olhos. Obrigado novamente.