none
Boa tarde! hoje pela manhã aconteceu um problema no meu sistema feito em excel vba! RRS feed

  • Pergunta

  • um problema ocorreu em um userform que tem um login, esse userform tem um combobox que carrega o nome dos usuários! que está em uma planilha! já tem uns três meses que uso esse userform e nunca apresentou isso! o problema foi o seguinte ao carrega o userform o combobox pegou outros dados que estavam em outra planilha e não os do usuários! Por favor alguém poderia me dizer porque aconteceu isso! estou com medo de meu projeto começar a apresentar falhas! eu dependo desse projeto para executar meu trabalho!!


    • Editado Gênises sábado, 5 de março de 2016 09:48
    quinta-feira, 3 de março de 2016 15:08

Respostas

  • Gênises,

    apenas contribuindo um pouco mais: é sempre bom qualificar o que se deseja, ou seja, escrever todo o caminho e não apenas a parte final. Assim, caso seja possível alternar entre diferentes pastas de trabalho, é importante explicitar à qual pasta se refere e não apenas planilha.

    Para acessar uma informação numa planilha, existem basicamente 4 formas (suprimi o nome da pasta, por simplicidade):

    x = ActiveSheet.Range("A1").Value2       'Use esta quando tiver certeza que sempre desejará a Aba ativa
    x = Sheets("NomeAba").Range("A1").Value2 'Use esta quando o nome da Aba indicar o destino. Note que se o usuário alterar o nome da Aba seu código deixará de funcionar.
    x = Sheets(1).Range("A1").Value2         'Use esta quando souber a posição da Aba, contando da esquerda para a direita (incluindo as ocultas). Note que se o usuário alterar a ordem seu código deixará de funcionar.
    x = Plan1.Range("A1").Value2             'Use esta quando o CodeName da Aba indicar o destino. Esse parâmetro somente pode ser alterado pelo VBE, tornando imune a alterações do usuário, exceto exclusão da Aba.
    

    A decisão de qual delas escolher depende das características de seu projeto, não existindo solução ideal universal. No caso de uma planilha de Loging, por exemplo, eu optaria pela 4ª forma, uma vez que nas outras o usuário poderia forçar o código a dar erro quase sem querer.

    Espero ter ajudado.

    Abraço.


    Filipe Magno

    sábado, 5 de março de 2016 02:18

Todas as Respostas

  • Olá.

    Não é possível indicar qualquer possibilidade sem analisar seu código. Existem infinitas formas disso acontecer. Você precisa ao menos disponibilizar a parte do código que faz a função indicada.

    Abraço.


    Filipe Magno

    quinta-feira, 3 de março de 2016 22:31
  • Bom dia Filipe obrigad pela atenção! 

    O código é esse ele é carregado no evento inicialize do userform!

    Workbooks("SOFTWAREAMORIM").Activate Sheets("plan15").Select DTPicker2.Value = Sheets("PLAN15").Range("R1") DTPicker1.Value = Sheets("PLAN15").Range("R2") If Sheets("PLAN15").Range("T1").Value <= 0 Then Label16.Caption = "Sua licença expirou em " & Sheets("plan15").Range("r1") Label16.ForeColor = &HFF& Else Label16.Caption = "Sua licença expira em " & Sheets("plan15").Range("t1") & " Dias!" UserForm1.Label16.ForeColor = &H80000012 End If Dim hWnd As Long

    'Vai para o topo do formulário

    ScrollTop = 0

    'Define os botões minimizar e maximizar do form hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H84C80080 Or &H10000 Application.Visible = False Sheets("plan38").Select ComboBox1.ColumnCount = 4 ComboBox1.RowSource = "plan38!A2:A20" ComboBox1.Font.Size = 10 ComboBox1.Font.Name = "Verdana"


    A versão do vba é a do excel 2007!






    • Editado Gênises sexta-feira, 4 de março de 2016 10:51
    sexta-feira, 4 de março de 2016 10:46
  • Bom dia!

    Sabe informar qual o nome do erro ?

    No lugar de:

    Workbooks("SOFTWAREAMORIM").Activate

    Não seria:

    Workbooks("SOFTWAREAMORIM.xlsm").Activate

    sua extensão do arquivo ?

    também podemos apontar que seja o nome da planilha, talvez você tenha alterado.

    Sheets("plan15").Select

    Veja no VBA o nome da planilha 15, você pode usar vários métodos para isso:


    Veja outro exemplo:

    e Também podemos usar o nome de exibição da Planilha, que é aquela que usamos as aspas, por exemplo:

    Sheets("plan15").Select

    Se for possível, mostra a mensagem de erro, que agente tenta solucionar. Espero ter ajudado.

    Abraços!


    • Editado Fepus sexta-feira, 4 de março de 2016 11:31
    • Sugerido como Resposta Fepus sexta-feira, 4 de março de 2016 17:24
    sexta-feira, 4 de março de 2016 11:30
  • Dim wb As Workbook, ws As Worksheet
    
    Set wb = Thisworkbook
    Set ws = wb.Sheets("Sheet1")
    
    If ComboBox1.Value = "Item1" Then _
       ComboBox2.RowSource = "'[" & wb.Name & "]" & ws.name & "'!" & "Item1"

    Tente algo assim.

    Att,


    Antero Marques

    sexta-feira, 4 de março de 2016 11:44
  • Obrigado pela ajuda amigo! Já olhei no VBA se o nome da planilha está correto! e já estava correto! mas alterei de

    sheets("plan38").select para sheets(38).select

    e concetei

    Workbooks("SOFTWAREAMORIM.xlsm").Activate



    Não tive como ver se deu certo porque como já havia dito isso não ocorre toda as vezes! tenho que

    esperar para ver se isso continua a ocorrer!

    MUITO OBRIGADO PELA SUA AJUDA! FEPUS




    • Editado Gênises sexta-feira, 4 de março de 2016 16:54
    sexta-feira, 4 de março de 2016 16:42
  • Obrigado pela atenção Marcos! seu código funciona! mas queria saber o que tem de errado no meu! obrigado pela ajuda!
    • Editado Gênises sexta-feira, 4 de março de 2016 16:55
    sexta-feira, 4 de março de 2016 16:52
  • Gênises,

    Pelo que pude perceber, por alguma razão, perde-se a referência WorkSheet e é necessário qualificar o objeto para entendimento do código.

    O porquê dessa perda de referência, não sei te dizer.

    Att,


    Antero Marques

    sexta-feira, 4 de março de 2016 17:06
  • Gênises,

    Por nada, precisando estamos aqui.

    Abraços!

    sexta-feira, 4 de março de 2016 17:27
  • Gênises,

    apenas contribuindo um pouco mais: é sempre bom qualificar o que se deseja, ou seja, escrever todo o caminho e não apenas a parte final. Assim, caso seja possível alternar entre diferentes pastas de trabalho, é importante explicitar à qual pasta se refere e não apenas planilha.

    Para acessar uma informação numa planilha, existem basicamente 4 formas (suprimi o nome da pasta, por simplicidade):

    x = ActiveSheet.Range("A1").Value2       'Use esta quando tiver certeza que sempre desejará a Aba ativa
    x = Sheets("NomeAba").Range("A1").Value2 'Use esta quando o nome da Aba indicar o destino. Note que se o usuário alterar o nome da Aba seu código deixará de funcionar.
    x = Sheets(1).Range("A1").Value2         'Use esta quando souber a posição da Aba, contando da esquerda para a direita (incluindo as ocultas). Note que se o usuário alterar a ordem seu código deixará de funcionar.
    x = Plan1.Range("A1").Value2             'Use esta quando o CodeName da Aba indicar o destino. Esse parâmetro somente pode ser alterado pelo VBE, tornando imune a alterações do usuário, exceto exclusão da Aba.
    

    A decisão de qual delas escolher depende das características de seu projeto, não existindo solução ideal universal. No caso de uma planilha de Loging, por exemplo, eu optaria pela 4ª forma, uma vez que nas outras o usuário poderia forçar o código a dar erro quase sem querer.

    Espero ter ajudado.

    Abraço.


    Filipe Magno

    sábado, 5 de março de 2016 02:18
  • Obrigado! ajudou muito!
    sábado, 5 de março de 2016 09:58