Inquiridor
ERRO MICROSOFT EXCEL VBA

Pergunta
-
ERRO MICROSOFT EXCEL VBA
Meu nome é Michel, por favor, alguém pode me ajudar?
Fiz um programa em VBA que abre uma planilha e um formulário de Login e Senha para entrar no formulário principal.
Durante meses abriu sem problema.
O erro aconteceu depois que tive um problema em outro arquivo numa planilha do Excel quando apareceu uma letras que não faziam parte das celulas da planilha.
Quando clico no botão OK do formulário que criei de Loguin para entrar dá o seguinte erro:
MICROSOFT OFFICE EXCEL HAS STOPPED WORKING
Isso nunca tinha acontecido em meses.
Segue alguns códigos do programa:
Códigos do Módulo
Sub AUTO_OPEN()
UserForm4.Show
End SubCódigo do Formulário de Loguin
Private Sub BTSAIR2_Click()
If MsgBox("DESEJA SAIR DO PROGRAMA?", vbInformation + vbYesNo, "AVISO") = vbYes Then
Worksheets("B.E.G.D.").Activate
ThisWorkbook.Application.Quit
End If
End Sub
Private Sub BTOK2_Click()
Worksheets("OS").Activate
A12.Value = Worksheets("OS").Range("HD24")
A22.Value = Worksheets("OS").Range("HD25")
A32.Value = LOGINNOME2.Value
A42.Value = LOGINSENHA2.Value
If A32 = A12 And A42 = A22 Then
UserForm1.Show
Else
LOGINNOME2.Text = ""
LOGINSENHA2.Text = ""
LOGINNOME2.SetFocus
MsgBox "POR FAVOR, DIGITE SUA SENHA E LOGIN", vbCritical, "SENHA ERRADA"
End If
End Sub
Private Sub LOGINNOME2_Change()
LOGINNOME2.MaxLength = 10
End Sub
Private Sub LOGINSENHA2_Change()
LOGINSENHA2.MaxLength = 6
End Sub
Private Sub UserForm4_Initialize()
Worksheets("OS").Activate
A12.Visible = False
A22.Visible = False
A32.Visible = False
A42.Visible = False
LOGINNOME2.SetFocus
End SubAgradeço antecipadamente,
Muito Obrigado
Todas as Respostas
-
Michel,
O erro pode ter ocorrido apenas na outra planilha ou no UserForm, mas como não possui tratamento de erro acabou repassando o erro em cascata.
Faça um teste para identificar o problema correto, incluindo um "GOTO".
Veja um exemplo abaixo:
Private Sub BTOK2_Click() On Error GoTo Falha Worksheets("OS").Activate A12.Value = Worksheets("OS").Range("HD24") A22.Value = Worksheets("OS").Range("HD25") A32.Value = LOGINNOME2.Value A42.Value = LOGINSENHA2.Value If A32 = A12 And A42 = A22 Then UserForm1.Show Else LOGINNOME2.Text = "" LOGINSENHA2.Text = "" LOGINNOME2.SetFocus MsgBox "POR FAVOR, DIGITE SUA SENHA E LOGIN", vbCritical, "SENHA ERRADA" End If Exit Sub Falha: Msgbox Err.Description End Sub
Após identificar o erro, você poderá efetuar o tratamento adequado.
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
Prezado Durval,
Antes de mais nada, quero agradecer sua atenção.
Substituí os códigos (copiei e colei) que vc enviou mas não funcionou.
Continua aparecendo a janela MICROSOFT OFFICE EXCEL HAS STOPPED WORKING
e o ponteiro do mouse vira um círculo girando como se entrasse num loop sem fim.
Não apareceu nenhuma identificação de erro.
Segue os códigos:
Private Sub BTSAIR2_Click()
If MsgBox("DESEJA SAIR DO PROGRAMA?", vbInformation + vbYesNo, "AVISO") = vbYes Then
ThisWorkbook.Application.Quit
End If
End Sub
Private Sub BTOK2_Click()
On Error GoTo Falha
Worksheets("OS").Activate
A12.Value = Worksheets("OS").Range("HD24")
A22.Value = Worksheets("OS").Range("HD25")
A32.Value = LOGINNOME2.Value
A42.Value = LOGINSENHA2.Value
If A32 = A12 And A42 = A22 Then
UserForm1.Show
Else
LOGINNOME2.Text = ""
LOGINSENHA2.Text = ""
LOGINNOME2.SetFocus
MsgBox "POR FAVOR, DIGITE SUA SENHA E LOGIN", vbCritical, "SENHA ERRADA"
End If
Exit Sub
Falha:
MsgBox Err.Description
End Sub
Private Sub LOGINNOME2_Change()
LOGINNOME2.MaxLength = 10
End Sub
Private Sub LOGINSENHA2_Change()
LOGINSENHA2.MaxLength = 6
End Sub
Private Sub UserForm4_Initialize()
Worksheets("OS").Activate
A12.Visible = False
A22.Visible = False
A32.Visible = False
A42.Visible = False
A12.Enabled = False
A22.Enabled = False
A32.Enabled = False
A42.Enabled = False
LOGINNOME2.SetFocus
End Sub
Private Sub UserForm_Layout()
Me.Move 0, 0
End Sub
Muito obrigado, um abraço,
Michel
-
Boa noite Michel.
Olhando rapidamente seu código não parece haver erros que poderiam gerar esse problema, mas já que não aconteceu um "erro" propriamente dito, me levo a concluir que o Excel está executando um Loop infinito, de forma que a execução não seja interrompida até o Excel entrar em crash.
Para verificar isso rode o formulário em modo depuração (F8) e verifique por favor se a execução tem ou não um ponto final. Outra dica é retirar as funções "...Change", elas são totalmente desnecessárias para o seu código. Mova o ".MaxLength = ..." para o evento "Initialize". Pode ser inclusive que o Loop ocorra nessas funções.
Caso não dê certo, sugiro que poste uma versão reduzida de seu arquivo para análise.
Um grande abraço.
Filipe Magno
-
Prezado Felipe Magno,
Obrigado pela sua atenção.
Antes de lhe enviar os códigos vou tentar historiar em detalhes como tudo aconteceu
(talvez isso ajude a descobrir onde está o erro).
Tenho outro arquivo que é uma planilha do Excel.
Eu estava colocando valores nessa planilha (os valores das células são do tipo “=40+110
quando quero acrescentar mais um valor à célula coloco o sinal + e o novo valor para somar”
nesse momento, com a célula ainda em uso, precisei exibir a barra de fórmulas que estava oculta
para acrescentar mais um valor, foi aí que apareceu na célula que eu estava acrescentando valor
uma letra com um número tipo “M1=40+110”, a letra e o número não foi eu que digitei,
LEMBRE QUE, quando tudo isso estava acontecendo o outro arquivo em VBA ESTAVA ABERTO,
acho que de alguma forma isso provocou o erro que está acontecendo no arquivo em VBA (ou erro talvez no Excel)
Faz 4 meses que uso e já fiz várias atualizações do programa com o formulário de Login e Senha e
em todo esse tempo, todas as versões NUNCA deram erro, sempre abriam normalmente.
Hoje tentei abrir uma versão antiga de 2 meses atrás, deu o mesmo erro que está dando na última versão.
Mesmo a versão mais recente também nunca tinha dado erro, começou depois do episódio narrado acima
(como pode versões que nunca deram erro agora estão dando?).
O MAIS ESTRANHO é que ÁS VEZES a última versão ABRE NORMALMENTE sem dar erro???
Por isso estou achando que o problema está no Excel (a minha versão é 2007) porque se fosse um problema do programa não abriria nunca.
Tentei modificar essa Sub BTOK_Click eliminando o IF e mudando os códigos com Login e Senha
pré-definidos, mesmo assim dava erro, agora simplifiquei ao máximo e continua as vezes abre outras não.
Desculpe o texto acima com os mínimos detalhes!
O arquivo em VBA que está dando erro abre uma planilha e um formulário de Login e Senha com
os botões Sair (BTSAIR) que não dá erro e o botão Entrar (BTOK) cuja função é abrir o formulário
principal, esse botão é o que dá o erro em questão.
A depuração com F8 aponta erro no botão BTOK.
O erro aparece como abaixo:
_________________________________________________________________________________________
Microsoft Office Excel
MICROSOFT OFFICE EXCEL HAS STOPPED WORKING
Windows can check online for a solution to the problem and try to recover your information
- Check online for a solution and close the program
- Close the program
______________________________________________________________________________________
Quando escolho qualquer uma das duas opções o programa VBA fecha.
Segue os códigos:
ESTA PASTA DE TRABALHO:
Private Sub Workbook_Open()
UserForm4.Show
End Sub
CÓDIGO DO FORMULÁRIO E LOGIN:
Private Sub BTOK_Click()
LOGINNOME2.MaxLength = 10
LOGINSENHA2.MaxLength = 6
LOGINNOME2.SetFocus
Worksheets("OS").Activate
A12.Value = Worksheets("OS").Range("HD24")
A22.Value = Worksheets("OS").Range("HD25")
A32.Value = LOGINNOME2.Value
A42.Value = LOGINSENHA2.Value
If A32 = A12 And A42 = A22 Then
UserForm1.Show
Else
LOGINNOME2.Text = ""
LOGINSENHA2.Text = ""
LOGINNOME2.SetFocus
MsgBox "POR FAVOR, DIGITE SUA SENHA E LOGIN", vbCritical, "SENHA ERRADA"
End If
End Sub
Private Sub BTSAIR_Click()
If MsgBox("DESEJA SAIR DO PROGRAMA?", vbInformation + vbYesNo, "AVISO") = vbYes Then
ThisWorkbook.Application.Quit
End If
End Sub
Mais uma vez, obrigado,
Michel
-
Boa noite Michel.
Para ser sincero, não entendi a relação da fórmula digitada, com o arquivo aberto e o erro no formulário.
Quanto ao seu código, insisto que não deve colocar o
LOGINNOME2.MaxLength = 10 e LOGINSENHA2.MaxLength = 6
dentro do evento do botão, uma vez que esta é uma propriedade estática dos controles e deve ser estabelecida antes do usuário preencher as TextBoxes. Não faz sentido setar isso depois que o usuário já digitou os dados.
também não entendi as linhas tipo:
A12.Value = Worksheets("OS").Range("HD24")
"A12" é o nome de uma TextBox oculta?
Uma última pergunta: em qual linha ocorre o erro, quando se executa no modo depuração (F8).
Abraço.
Filipe Magno
-
Boa noite Felipe,
Segue os códigos novamente, as explicações estão nos textos sublinhados em vermelho:
ESTA PASTA DE TRABALHO:
Private Sub Workbook_Open()
UserForm4.Show
ESSE FORMULÁRIO 4 ABRE AS TEXTBOX LOGIN E SENHA PARA SEREM DIGITADAS PELO USUÁRIO
End Sub
OS CÓDIGOS ABAIXO FAZIAM PARTE DA INICIALIZAÇÃO DO FORMULARIO 4
Private Sub UserForm_Initialize()
LOGINNOME2.MaxLength = 10
LOGINSENHA2.MaxLength = 6
LOGINNOME2.SetFocus
End Sub
COLOQUEI POR ENGANO MAS JÁ RETIREI DA SUB BTOK Click()
CÓDIGO DO FORMULÁRIO E LOGIN:
Private Sub BTOK_Click()
EU USO A PLANILHA “OS” COMO BANCO DE DADOS
E TAMBÉM PARA PARÂMETROS DE CONTROLE
Worksheets("OS").Activate
AS CÉLULAS “HD24” E “HD25” ARMAZENAM O NOVO LOGIN E SENHA QUE
O USUÁRIO PODE MODIFICAR DENTRO DO PROGRAMA (FORMULÁRIO 2)
A12.Value = Worksheets("OS").Range("HD24")
A22.Value = Worksheets("OS").Range("HD25")
A32.Value = LOGINNOME2.Value
A42.Value = LOGINSENHA2.Value
QUANDO O VBA COMPARA RANGE COM TEXTBOX SEMPRE DÁ ERRO.
USO AS TEXTBOX OCULTAS (A12,A22,A32 e A42) PARA COMPARAR AS
LOGIN/SENHA DIGITADOS (A32 e A42) COM AS LOGIN/SENHA (A12 e A22)
CORRETAS ARMAZENADOS NAS RANGE “HD24” E “HD25”
If A32 = A12 And A42 = A22 Then
UserForm1.Show
Else
LOGINNOME2.Text = ""
LOGINSENHA2.Text = ""
LOGINNOME2.SetFocus
MsgBox "POR FAVOR, DIGITE SUA SENHA E LOGIN", vbCritical, "SENHA ERRADA"
End If
End Sub
____________________________________________________________________________________________
Private Sub BTSAIR_Click()
If MsgBox("DESEJA SAIR DO PROGRAMA?", vbInformation + vbYesNo, "AVISO") = vbYes Then
ThisWorkbook.Application.Quit
End If
End Sub
NO MODO DEPURAÇÃO F8 O ERRO OCORRE EM:
Private Sub BTOK_Click()
Tentei enviar as imagens dos formulários, mas este sistema de resposta não aceita imagens.
Meu e-mail é MICHELNH9@GMAIL,COM este é o que eu uso mais, se vc quiser posso lhe enviar as imagens dos formulários (1,2 e 4) para vc entender melhor o programa, caso concorde envie um e-mail para mim.
Vejo que vc está tendo muita paciência comigo.
Obrigado,
Michel
-
Boa noite Michel.
Desculpe a demora para responder, mas estou em viagem de trabalho e não estou tendo muito tempo.
Para facilitar as coisas, coloque um exemplo resumido de sua planilha (retirando os dados que possam ser confidenciais) no OneDrive, SendSpace, Google Drive ou similar e cole o link aqui. Fica muito mais fácil ajudar tendo o projeto em mãos.
Assim que der uma folguinha dou uma olhada mais detalhada.
Abraço.
Filipe Magno
-
Boa tarde Felipe,
O que não consigo entender é que, quando clico em ENTRAR (BTOK_Click) AS VEZES ABRE NORMAL E AS VEZES DÁ ERRO ??????
Não seria um problema no Excel (uso o 2007)?
Sempre funcionou durante meses, abria o Formulário1 normalmente.
Coloquei no Google Drive “ARQUIVOS MICHEL.pdf” as imagens dos Formulários e Planilhas.
Nunca usei o Google Drive portanto não sei como enviar pra vc.
Segue os códigos bastante simplificado do Formulário4 mesmo assim as vezes dá erro.
Private Sub BTOK_Click()
MESMO SIMPLIFICANDO O CÓDIGO PARA:
UserForm1.Show
End Sub
NO MODO DEPURAÇÃO F8 AINDA OCORRE O ERRO EM:
Private Sub BTOK_Click()
Private Sub BTSAIR2_Click()
If MsgBox("DESEJA SAIR DO PROGRAMA?", vbInformation + vbYesNo, "AVISO") = vbYes Then
ThisWorkbook.Application.Quit
End If
End Sub
Vc pode ver que simplifiquei ao máximo - só para testar - se o erro estava nos códigos.
Um abraço,
Michel
-
-
-
-
-
Boa noite Michel.
Não precisa pedir desculpas por isso. Estamos sempre aprendendo.
Mas a respeito do arquivo enviado, apenas com as imagens não dá pra fazer qualquer diagnóstico diferente do que eu já disse. Se minhas sugestões não resolveram, apenas debugando seu código passo a passo e tentando reproduzir o erro será possível sugerir algo diferente. Não é preciso enviar todo o seu projeto, apenas as partes essenciais para reproduzir o erro. Se puder enviar, simplifique o máximo possível seu projeto e apague qualquer informação importante que possa ter. Sem isso não consigo pensar em nada mais para sugerir.
Abraço.
Filipe Magno
-
Boa noite Felipe,
Qual a explicação para:
- ainda hoje o arquivo abriu normal,
- depois tentei abrir novamente e deu erro?
Vc não acha que o problema está no Office?
O meu é 2007.
Tentei enviar o arquivo completo pelo Google Drive, não deu certo.
Só para efeito de teste, reduzi o código de acesso somente com o código abaixo:
Private Sub BTOK Click()
UserForm1.Show
End Sub
Continuou dando erro!
Um abraço,
Michel
-
Felipe,
Na Sub abaixo não coloquei os códigos de Login e Senha só para efeito de teste:
Private Sub BTOK Click()
UserForm1.Show
End Sub
Nela fiz o seguinte teste:
- modifiquei o código "UserForm1.Show" para "UserForm2.Show", para acessar o Formulário 2;
- em várias tentativas o VBA abriu o Formulário 2 sem problema, NÂO deu erro;
- voltei a usar "UserForm1.Show" e numa primeira tentativa, abriu sem problema, mas na seguinte deu erro.
É como se o VBA, as vezes sim, as vezes não, localiza o "UserForm1.Show", muito estranho não?
Mesmo quando NÂO dá erro:
NO MODO DEPURAÇÃO F8 AINDA OCORRE O ERRO EM:
Private Sub BTOK_Click()
???? como explicar isso?
Outra curiosidade:
- no ano 2013 fiz um programa para um corretor de imóveis;
- programa com Login e Senha de acesso e abriu várias vezes sem problema. até hoje;
- a lógica é que, como os códigos são similares deveria dar o mesmo erro.
Com relação ao erro "MICROSOFT OFFICE EXCEL HAS STOPPED WORKING", pesquisei na internet e fiz quase todas as soluções indicadas mas continuou dando erro, por isso creio que o problema está no Office/VBA.
Comprei o Office 2013 mais ainda não instalei porque:
- quero primeiro descobrir o erro que está acontecendo no Office 2007 ;
- para se acontecer também no 2013, eu saberei como orientar o usuário do programa na solução.
Também quero lhe dizer que aprendi a linguagem VBA sòzinho sem nenhum professor, portanto não sou muito entendido no assunto.
Essa minha novela parece que não termina nunca.
Um abraço,
Michel
-
Michel,
apenas para reforçar, sem o seu projeto em mãos fica muito difícil lhe ajudar mais. Pode ser um erro do Excel, isso não seria incomum, entretanto não dá pra afirmar apenas com as informações disponíveis.
Uma possibilidade que poderia gerar a ambiguidade seria se existisse algum botão com nome repetido, mas nesse caso penso que o erro aconteceria sempre e não intermitente.
Abraço.
Filipe Magno
-
Caro Felipe,
Não tenho nenhum problema em lhe enviar o projeto completo, acontece que
tentei enviar pelo Google Drive e não consegui.
Poderia enviar por e-mail ou de outra maneira que melhor lhe aprouver.
Por favor, diga qual maneira.
Um abraço,
Michel
-
Boa noite Michel.
Para enviar pelo Google Drive basta fazer exatamente o mesmo procedimento que vc já fez para enviar os outros arquivos. Não há diferença alguma.
Mas caso queira enviar pelo OneDrive (mesma conta para acessar esse fórum), basta seguir as orientações:
http://www.ambienteoffice.com.br/outros/como_disponibilizar_um_arquivo_para_download/
Abraço.
Filipe Magno
-
-
Boa noite Michel.
Consegui abrir seu arquivo, mas não encontrei o erro que vc descreveu (na verdade não encontrei nem a "Sub BTOK_Click()", estou supondo que vc alterou para "BTENTRAR_Click").
Seu código é muito extenso, não há como analisá-lo por completo. Estou utilizando o Excel 2010 e não consegui reproduzir o erro que vc descreveu, mesmo abrindo e fechando várias vezes sucessivamente (apenas clicar no botão "Entrar", certo?). Talvez seja algum problema mesmo do Excel, mas não dá pra afirmar com certeza.
O jeito é ver se alguém consegue sugerir algo ou encontrar algum procedimento que faça com que o erro se repita sempre.
Abraço.
Filipe Magno
-
-
Caro Felipe,
Por favor, peço que vc faça mais um teste.
Na sua última mensagem vc escreveu:
Consegui abrir seu arquivo, mas não encontrei o erro que vc descreveu (na verdade não encontrei nem a "Sub BTOK_Click()", estou supondo que vc alterou para "BTENTRAR_Click").
Seu código é muito extenso, não há como analisá-lo por completo. Estou utilizando o Excel 2010 e não consegui reproduzir o erro que vc descreveu, mesmo abrindo e fechando várias vezes sucessivamente (apenas clicar no botão "Entrar", certo?). Talvez seja algum problema mesmo do Excel, mas não dá pra afirmar com certeza.
O jeito é ver se alguém consegue sugerir algo ou encontrar algum procedimento que faça com que o erro se repita sempre.
Pois bem, faça a depuração total com F8, deverá aparecer erro no Private Sub UserForm_Initialize().
A pergunta é por que mesmo abrindo sem problema a depuração continua mostrando erro?
Instalei Office 2013 e fiz um pequeno programa só para testar, mesmo abrindo sem problema também na depuração total mostra erro.
Segue abaixo o link:
https://drive.google.com/file/d/0B8MHBL5bY3LlcDBXLWhHRnZCcVJfR3BQbjRTR0t4b29HaTVj/edit?usp=sharing
Obrigado e um abraço,
Michel
-
Boa noite Michel.
Nos meus testes, nem este nem outro arquivo apresentaram qualquer erro, mesmo em depuração com F8.
Não vejo motivos para este último arquivo resultar em erro. Praticamente não há código algum nele. Sugiro que vc mesmo faça um teste em outro computador e tente reproduzir o erro. Aqui no meu eu não consegui.
Abraço.
Filipe Magno
-