Posso usar uma macro para proteger uma célula de uma planilha do Excel com senha?

Posso usar uma macro para proteger uma célula de uma planilha do Excel com senha?

Tenho uma planilha Excel configurada como timeclock. O funcionário abre o arquivo de ponto da semana e preenche a data de término da semana no local designado. De agora em diante, apenas o mouse será usado para entrada. O funcionário seleciona a célula adequada para o dia da semana e a ação de marcar, ir almoçar, voltar do almoço e voltar para casa. Após posicionarem o cursor sobre a célula correta, eles clicam em um botão (botão vinculado a uma macro) que preenche o tempo correto para a ação. Não consigo descobrir como evitar que eles simplesmente vão até a célula que desejam e digitem a hora que quiserem. Tentei adicionar a proteção da célula com uma senha como parte da macro do botão, mas não consegui fazer isso funcionar. Alguém tem como proteger as células para que o funcionário não altere os horários? Ou existe apenas uma maneira mais fácil de fazer tudo isso juntos?

Responder1

Seus usuários têm acesso para gravar no arquivo Excel...

Não acho que você possa aplicar isso tecnicamente no Excel; Acho que você quer um software alternativo. Admiro sua habilidade com macros do Excel.

Para elaborar:

  • Se o usuário puder modificar a célula, ela não estará protegida contra o usuário simplesmente modificar a célula por conta própria (digitando um valor).
  • Se o usuário não puder modificar a célula, ela estará protegida contra o usuário apenas digitar um valor, mas também não poderá fazer com que as informações corretas sejam gravadas nela a partir de uma macro.

Isso é diferente da criptografia de células, que impede até mesmo a leitura sem a senha.

Acho que existem muitos softwares de cartão de ponto por aí, e a maior parte deles provavelmente pode exportar os dados coletados para o Excel. Eu expandiria meus horizontes além das planilhas se estivesse no seu lugar.

Responder2

Você pode proibir alterações nas células por um manipulador de eventos VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    With Target
        If If Not Intersect(Target, Range("A1:B10")) Is Nothing Then Application.Undo
    End With
    Application.EnableEvents = True
End Sub

Não sei se definir o valor das células por meio de uma macro VBA faz com que esse evento seja acionado. Eu sei que não dispara por mudanças induzidas por fórmulas. Mas você pode facilmente definir uma variável global para permitir que as alterações sejam definidas antes de alterar a célula e desmarcá-la depois.

Você também pode tentar capturar o Worksheet_SelectionChangeevento, para evitar que o usuário posicione o cursor dentro da célula. Você pode, para as células não permitidas, reposicionar o cursor em alguma célula predefinida (como A1) ou escrever algum código mais complicado para lembrar a última posição permitida do cursor e reposicioná-la.

informação relacionada