Impedir Seleção de ...
 
Notifications
Clear all

Impedir Seleção de Células Específicas

3 Posts
2 Usuários
0 Reactions
1,090 Visualizações
(@boobymcgee)
Posts: 84
Trusted Member
Topic starter
 

Boa tarde.
Prezados, tenho o código abaixo para impedir a seleção de determinadas células, funciona se for selecionada somente uma célula, se selecionar mais de uma passa batido. Como faço para funcionar independente da quantidade selecionada?

Public Sub AcessoRestrito()
                ' Desabilita a atualização da tela
    'Application.ScreenUpdating = False

                ' Determina as células restritas
  For Each k In Range("B1:G2,C5,C6,C7,B28:G30,B41:G43,B54:H56,B72:F76,B79:E87,B93:E105,E2:F72")
  
  lCelselec2 = Selection.Address
    If Not Intersect(k, Selection) Is Nothing Then
        If lCelselec2 = k.Address Then
            MsgBox "Você não pode selecionar a célula " & k.Address & ", selecione outro intervalo.", vbCritical, "Controle de Gastos"
                Range("A1").Select
GoTo Vai:
        End If
    End If
  Next k
        Call AlteraClick
Vai:
lCelselec2 = ""

            ' Habilita a atualização da tela
    'Application.ScreenUpdating = True

End Sub
 
Postado : 30/08/2022 5:35 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Ao invés de VBA, um modo simples de impedir a seleção de determinadas células pode ser implementado desmarcando a opção [permitir] "Selecionar células bloqueadas" na guia Revisão > Proteger Planilha (logicamente após já ter marcado todas as que serão mantidas bloqueadas e as não bloqueadas).

 
Postado : 31/08/2022 1:00 am
(@boobymcgee)
Posts: 84
Trusted Member
Topic starter
 

Boa tarde.

Edson, grato por seu retorno.
Talvez eu tenha sido um pouco sucinto na informação, causando a impressão que simplesmente bloquear e proteger resolveria, mas a situação vai mais além.
A planilha é protegida e todas as células são bloqueadas, entretanto, algumas células devem ser editadas e outras, com as formulas, que não podem ser editadas, para a edição de cada célula ou intervalo, vai solicitar ao usuário para inserir uma senha para liberar a edição desta célula, após a inserção do dado a célula fica novamente bloqueada, com isso eu preciso que as células com formulas e dados fixos não possam ser acessadas. Certamente o usuário que necessitar inserir dados em mais de uma célula, e sendo estas adjacentes, selecionará um intervalo, nesse momento é que poderá selecionar uma célula indevida e apagar uma formula, causando erro.

Esse código funciona para células isoladas, em intervalos não funciona, também não consigo descrever todas as células restritas individualmente, pois o número de argumentos excede o máximo permitido, por isso estão agrupadas em intervalos.

Ao mostrar o código, ele não mostra os argumentos todos, seria assim:

Public Sub AcessoRestrito()
                ' Desabilita a atualização da tela
    'Application.ScreenUpdating = False

                ' Determina as células restritas
  For Each k In Range("B1:G2,C5:C7,B28:G30,B41:G43,B54:H56,B72:F76,B79:E87,B93:E105,E2:F72")
  
  lCelselec2 = Selection.Address
    If Not Intersect(k, Selection) Is Nothing Then
        If lCelselec2 = k.Address Then
            MsgBox "Você não pode selecionar a célula " & k.Address & ", selecione outro intervalo.", vbCritical, "Controle de Gastos"
                Range("A1").Select
GoTo Vai:
        End If
    End If
  Next k
        Call AlteraClick
Vai:
lCelselec2 = ""

            ' Habilita a atualização da tela
    'Application.ScreenUpdating = True

End Sub

 

Este post foi modificado 2 anos atrás 4 vezes por boobymcgee
 
Postado : 31/08/2022 5:12 pm