Menu suspenso no Excel - O gerenciador precisa ter mais opções

0

Tenho menus suspensos configurados em células do Excel (trabalhando no office365), que toda a equipe pode acessar e alterar. Eu quero que os gerentes tenham uma opção extra na lista que somente eles possam selecionar. isso pode ser feito e como? obrigado

    
por Etienne 07.12.2017 / 10:42

2 respostas

0

Experimente este exemplo: Adicionar coluna auxiliar da conta, na minha amostra é:

Conta A1
A2 Staff
A3 Manager

IrparaNomesDefinidosporFórmulas-NomeIntervalodeequipeeintervalodoGerenciadordeNomes:

ListaB1
B2A
B3B
B4C
B5D
B6E
B7F

IntervalonomeadoB2:B6isEquipe

IntervalonomeadoB2:B7éGerente

Paralistasuspensa,adicionealistadecontasD2primeiro,váparaDados,Validaçãodedados,selecioneListaeselecioneaFonte:=Account

Emseguida,adicioneoutralistaE2pelafunção:=INDIRECT(D2)

Resultado:

    
por 08.12.2017 / 03:29
0

Sugiro uma solução experimental baseada em VBA. Faça uma tentativa. Observe que isso só é testado no Windows 7 64 bits do Office 2013 64 bits em um sistema autônomo.

Neste exemplo, a lista de validação suspensa é criada na célula E3.

Na planilha aplicável, pressione ALT + F11 para acessar o VBA Editor. Agora clique duas vezes em 'Thisworkbook' no painel esquerdo. Na janela de código do lado direito, selecione Geral no primeiro menu suspenso e Declarações no segundo menu suspenso.

Coloque o seguinte código nele

#If Win64 Then
    Private Declare PtrSafe Function Get_User_Name Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
    Private Declare  Function Get_User_Name Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If

Esta é uma tentativa de declarar a função correta com base no Bitness do sistema operacional. Ele pode lançar um erro de compilação ou destacar uma das linhas em vermelho com base em que bitness do sistema operacional você tem. Por enquanto, ignore este erro.

Se isso não funcionar, se você tiver o Windows de 64 bits, coloque apenas a primeira instrução de declaração e remova o restante. Private Declare PtrSafe.... e segundo caso você tenha 32 bits do Windows.

Agora, assim como você selecionou Geral - Declarações, agora selecione o evento Pasta de trabalho Abrir

Após o código do espaço reservado da sub-rotina deve aparecer

Private Sub Workbook_Open()

End Sub

Coloque o seguinte código entre estas duas linhas

Dim lpBuff As String * 65
Dim username As String
Const mgr_usr = "Manager"
Get_User_Name lpBuff, 65
username = UCase(Left(lpBuff, InStr(lpBuff, Chr(0)) - 1))

If username = UCase(mgr_usr) Then

Range("E3").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Usr1,Usr2,Usr3,Mgr1,Mgr2"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Else
Range("E3").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Usr1,Usr2,Usr3"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

End If

Você viu uma instrução Const mgr_usr = "Manager" Substituir gerente pelo nome de usuário real do gerente.

Agora, toda vez que a pasta de trabalho for aberta, o evento Abrir da Pasta de Trabalho será disparado. Primeiro, ele tentará obter o nome de usuário do Windows Então, se for do Manager ou de todos os demais, crie menus suspensos na lista personalizada na célula E3. Substitua a lista de validação com a lista pretendida, conforme desejado.

Poucas suposições / ressalvas / limitações a serem anotadas

  • O código é testado no Windows 7 64 Bit com o Office 2013 Standalone PC
  • O nome de usuário do Windows não tem mais de 64 caracteres, se esse tamanho for permitido
  • Não sei ao certo como isso se comportará no Windows 8,8,1,10 ou mais
  • Não sei ao certo como isso se comportará em um ambiente de rede, como as informações de nome de usuário são armazenadas / acessadas, se são do domínio do Windows, LDAP ou de qualquer outra forma, se relevante. Eu não sou um especialista em redes.
  • Não tenho certeza se algum Privilégio Administrativo seria necessário para executar a função 'Get_User_Name' em VB / VBA. Se sim, o código pode não funcionar corretamente em todos os sistemas do usuário.
  • Estou assumindo que você tenha um desktop do Office 365. No caso do Office 365 Online, o VBA é, acredito que não suportado.
  • A partir de agora, não tenho como verificar como isso se comportará se a mesma pasta de trabalho for colocada no modo compartilhado pela rede.
  • Não há histórico mantido; como resultado, o usuário precisaria selecionar novamente a opção correta na lista suspensa sempre que o arquivo fosse aberto.
por 08.12.2017 / 10:04