Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
diego_janjao

VBA - Exibição de abas

Recommended Posts

Olá pessoal. Eu montei uma planilha de gestão para a empresa e estão usando normalmente, no momento ela se encontra com dados disponíveis a todos que tem acesso a pasta. Enfim, foi solicitado que de algum jeito os usuários só pudessem visualizar o seu próprio conteúdo e assim eu criei um sistema de Login e Senha o qual está funcionando mas com um problema: A planilha não está exibindo a planilha correta de acordo com o usuário:

 

Dados:

 

A planilha fica com 3 abas em exibição para quaisquer usuários (Pendências, Verificar e Responsáveis)

O meu login com todas as abas é Diego e senha DIEGOCM

O Usuário Sandra com senha Sandra deveria exibir somente a aba PAM_Manutenção, mas está mostrando a da Qualidade

PAM_Inspeção_interna_2017_v6login.7z

 

Poderiam me ajudar a verificar o porquê disso acontecer?

Se alguém tiver mais alguma dica de otimização da planilha também serpa muito bem vinda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí, @diego_janjao , bom dia guri!

 

Dá uma olhada no seguinte laço, o problema parece estar nele:

For lContador = 2 To lTotal
   Sheets(Sheets("Senha").Range("C" & lContador).Value).Visible = True
Next lContador

lContador começa em 2, então vai buscar o conteúdo da célula C2, que não é a Sandra, pois C2 corresponde a linha em que está Diego, trazendo então "PAM_Qualidade". A Sandra começa na linha 10, mesmo após filtrar (os números de linha permanecem os mesmos ao aplicar filtro, o Excel apenas oculta as linhas que não atendem).

 

Vê se é por aí o problema... Se não for, manda um olá que poderemos avaliar melhor (só que aí só à noite, ok?)

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @Edson Luiz Branco Olá, tentei modificar aqui mas sem sucesso.

     

    eu tenho uma outra planilha que até onde me lembro funciona corretamente e trabalho com o mesmo VBA.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Amigo @diego_janjao, mudei  só 1 pouco seu código, testa aí prá ver se consegue aproveitar:

    Private Sub CommandButton1_Click()
      Dim rgNomePlans As Range, cél As Range
      With Sheets("Senha")
         .AutoFilterMode = False
         .Range("$A$1:$C$50000").AutoFilter Field:=1, Criteria1:="=" & txtUsuario.Text
         .Range("$A$1:$C$50000").AutoFilter Field:=2, Criteria1:="=" & txtsENHA.Text
         Set rgNomePlans = .AutoFilter.Range.Columns(3)
      End With
      If rgNomePlans.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
        Set rgNomePlans = rgNomePlans.Offset(1, 0).Resize(rgNomePlans.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        ActiveWorkbook.Unprotect Password:="123"
          For Each cél In rgNomePlans
            Sheets(cél.Value).Visible = True
          Next cél
        ActiveWorkbook.Protect Password:="123", Structure:=True, Windows:=False
      Else
        MsgBox "Usuário e/ou Nome Incorreto!" 'O auto-filtro resultou vazio
      End If
      Unload frmLogin
    End Sub

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @Edson Luiz Branco Perfeito, Edson!

    Mas está me resultando um problema quando login em branco (geralmente faço isso pra fazer "logoff").

     

    A depuração me informa essa linha:

     

            Sheets(cél.Value).Visible = True

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @diego_janjao E qual o resultado que deve ocorrer quando o login for em branco? Considerar como Usuário/Nome Incorreto ou simplesmente sair do código? Realmente daria Subscrito fora do intervalo já que essa situação não está prevista na planilha senha ou no código...

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • agora, Edson Luiz Branco disse:

    @diego_janjao E qual o resultado que deve ocorrer quando o login for em branco? Considerar como Usuário/Nome Incorreto ou simplesmente sair do código? Realmente daria Subscrito fora do intervalo já que essa situação não está prevista na planilha senha ou no código...

    No código anterior ele dava como usuário incorreto e ficavam apenas as abas liberadas à exibição.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @diego_janjao , vê agora, maninho:

    Private Sub CommandButton1_Click()
      Dim rgNomePlans As Range, cél As Range
      With Sheets("Senha")
         .AutoFilterMode = False
         .Range("$A$1").CurrentRegion.AutoFilter Field:=1, Criteria1:="=" & txtUsuario.Text
         .Range("$A$1").CurrentRegion.AutoFilter Field:=2, Criteria1:="=" & txtsENHA.Text
         Set rgNomePlans = .AutoFilter.Range.Columns(3)
      End With
      If rgNomePlans.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
        Set rgNomePlans = rgNomePlans.Offset(1, 0).Resize(rgNomePlans.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        ActiveWorkbook.Unprotect Password:="123"
          For Each cél In rgNomePlans
            Sheets(cél.Value).Visible = True
          Next cél
        ActiveWorkbook.Protect Password:="123", Structure:=True, Windows:=False
      Else
        MsgBox "Usuário e/ou Nome Incorreto!" 'O auto-filtro resultou vazio
      End If
      Unload frmLogin
    End Sub

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @Edson Luiz Branco Edson, agora ele não resulta nenhum erro ao deixar em branco.

     

    Mas ainda ficam as abas do último usuário abertas.

     

    Era para acontecer isso mesmo? Se sim, como eu faria "logoff"? Somente saindo do arquivo?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @diego_janjao, bem, eu me concentrei apenas na sua primeira queixa inicial, pois estava tornando visível a planilha errada conforme o usuário.

     

    Em 24/02/2017 às 04:05, diego_janjao disse:

    ...eu criei um sistema de Login e Senha o qual está funcionando mas com um problema: A planilha não está exibindo a planilha correta de acordo com o usuário...

    ...O Usuário Sandra com senha Sandra deveria exibir somente a aba PAM_Manutenção, mas está mostrando a da Qualidade...

    Poderiam me ajudar a verificar o porquê disso acontecer?

     

    Na verdade acabei não me preocupando em ver a funcionalidade do sistema como um todo, e sim somente essa disfunção localizada mesmo.

    Voltemos então à bancada.

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Em 28/02/2017 às 00:14, diego_janjao disse:

    Mas ainda ficam as abas do último usuário abertas.

     

    @diego_janjao  foi falha minha mesmo. Deletei sem querer a chamada ao procedimento lsDesabilitar que você estava usando no início do seu código do botão de comando. Foi mal.

    Então, se quiser testar agora:

    Private Sub CommandButton1_Click()
      Dim rgNomePlans As Range, cél As Range
      If Me.txtUsuario.Text = "" And _
           Me.txtsENHA.Text = "" Then
         lsDesabilitar
         Unload frmLogin
         Exit Sub
      End If
      With Sheets("Senha")
         .AutoFilterMode = False
         .Range("$A$1").CurrentRegion.AutoFilter Field:=1, Criteria1:="=" & txtUsuario.Text
         .Range("$A$1").CurrentRegion.AutoFilter Field:=2, Criteria1:="=" & txtsENHA.Text
         Set rgNomePlans = .AutoFilter.Range.Columns(3)
      End With
      If rgNomePlans.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
        Set rgNomePlans = rgNomePlans.Offset(1, 0).Resize(rgNomePlans.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
        ActiveWorkbook.Unprotect Password:="123"
          For Each cél In rgNomePlans
            Sheets(cél.Value).Visible = True
          Next cél
        ActiveWorkbook.Protect Password:="123", Structure:=True, Windows:=False
      Else
        MsgBox "Usuário e/ou Nome Incorreto!" 'O auto-filtro resultou vazio
        lsDesabilitar
      End If
      Unload frmLogin
    End Sub

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

     

    1 hora atrás, diego_janjao disse:

    Poderia me explicar o que você mudou?

     

    @diego_janjao ,do último código postado só inseri no início uma verificação que, se caso ambas as textboxes Usuário e Senha estivessem vazias ocultaria as planilhas deixando só as globais, descarrega o form e encerraria a rotina.

      If Me.txtUsuario.Text = "" And _
           Me.txtsENHA.Text = "" Then
         lsDesabilitar
         Unload frmLogin
         Exit Sub
      End If

     

    E já que você mencionou que

     

    Em 27/02/2017 às 03:31, diego_janjao disse:

    quando login em branco (geralmente faço isso pra fazer "logoff")

     

    imaginei que esse método serviria.

     

    Também chamei a rotina lsdesabilitar após a exibição da msgbox de usuário/senha errados. O restante está como no post anterior.

     

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Muito obrigado pela ajuda e pela aula!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×