Página 1 de 1

bloqueio de comandos para usuários específicos

Enviado: 27 Set 2018 às 11:42
por rhod
Galera,bom dia... estou tendo problemas num código: eu preciso bloquear alguns comandos básicos da planilha (ctrl C, ctrl V, etc...) para os usuários da rede.

A ideia é: apenas a chave do meu usuário e mais duas pessoas terão acesso para copiar, colar, etc... na planilha. Então eu dei um set no usuario e comparo com as 3 chaves que podem ter o acesso completo na planilha. Porém só funciona quando eu comparo a primeira chave no if. Segue o código:
Código: Selecionar todos
Private Sub Workbook_Open()

Dim wshNetwork As Object
Dim LogonName As Variant

Set wshNetwork = CreateObject("WScript.Network")  'localizo o nome do usuario logado no pc
LogonName = wshNetwork.UserName  'o usurio atual é ki2x

If Not LogonName = "tnnx" Or LogonName = ki2x Then 'aqui o "Or" não funcionou. Só pega se o ki2x estiver na primeira posição.

    With Application
        .CellDragAndDrop = False
   
 End With
        
    Application.OnKey "%{F11}", ""
    Application.OnKey "%{F8}", ""
    Application.OnKey "^x", ""
    Application.OnKey "^c", ""
    Application.OnKey "^v", ""
    Application.OnKey "^d", ""
    Application.OnKey "^{PGDN}", ""
    Application.OnKey "^{PGUP}", ""
    ActiveWindow.DisplayWorkbookTabs = False

Else
    
    ActiveWindow.DisplayWorkbookTabs = True

End If


End Sub

Alguma ideia? Obrigado

Re: bloqueio de comandos para usuários específicos

Enviado: 27 Set 2018 às 12:07
por osvaldomp
rhod escreveu: 'aqui o "Or" não funcionou. ~~~> experimente o "And" no lugar ;)

Re: bloqueio de comandos para usuários específicos

Enviado: 27 Set 2018 às 14:32
por rhod
osvaldomp escreveu:
rhod escreveu: 'aqui o "Or" não funcionou. ~~~> experimente o "And" no lugar ;)
Valeu Osvaldomp!! Já tinha tentado com o "and" e tbm não funcionou, porém, achei outra solução. Troquei o "if" pelo "select case" e deu certinho! Vou postar o código aqui. 8-)
Código: Selecionar todos
Private Sub Workbook_Open()

Dim wshNetwork As Object
Dim LogonName As Variant

Set wshNetwork = CreateObject("WScript.Network")
LogonName = wshNetwork.UserName

Select Case LogonName

    Case Is = "tnnx"
        ActiveWindow.DisplayWorkbookTabs = True
    
    Case Is = "ki2x"
        ActiveWindow.DisplayWorkbookTabs = True
    
    Case Is = "rra8"
        ActiveWindow.DisplayWorkbookTabs = True
    
    Case Else
        With Application
        .CellDragAndDrop = False
    End With
        
    Application.OnKey "%{F11}", ""
    Application.OnKey "%{F8}", ""
    Application.OnKey "^x", ""
    Application.OnKey "^c", ""
    Application.OnKey "^v", ""
    Application.OnKey "^d", ""
    Application.OnKey "^{PGDN}", ""
    Application.OnKey "^{PGUP}", ""
    ActiveWindow.DisplayWorkbookTabs = False

    
End Select

End Sub

Re: bloqueio de comandos para usuários específicos

Enviado: 27 Set 2018 às 17:12
por osvaldomp
rhod escreveu: Já tinha tentado com o "and" e tbm não funcionou,
Funciona sim! Você é que se enrolou aí. ;) Veja o exemplo abaixo.
Código: Selecionar todos
Sub testeV1()
 If Not [A1] = "tnnx" And Not [A1] = "ki2x" And Not [A1] = "rra8" Then
  MsgBox "A1 não contém tnnx, nem ki2x e nem rra8"
 Else: MsgBox [A1]
 End If
End Sub
porém, achei outra solução. Troquei o "if" pelo "select case"
O Select Case pode ser simplificado conforme abaixo. :)
Código: Selecionar todos
Sub testeV2()
 Select Case [A1]
  Case Is = "tnnx", "ki2x", "rra8": MsgBox [A1]
  Case Else: MsgBox "A1 não contém tnnx, nem ki2x e nem rra8"
 End Select
End Sub