Usuário com melhor resposta
Boa tarde! hoje pela manhã aconteceu um problema no meu sistema feito em excel vba!

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
Respostas
-
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
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 10 de março de 2016 21:08
Todas as Respostas
-
-
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
-
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!
-
-
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
-
-
-
-
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
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 10 de março de 2016 21:08
-