COMANDO SETFOCUS NAO FUNCIONA
Galera, boa noite..
Me ajudem, por favor...
Tenho um Userform com varios campos.... em um dele um Combo é preenchido e logo e seguida um Text. Após o preenchimento do Text, a rotina abiaxo é executada e o cursor deveria voltar ao Combo. Porem isso não está acontecendo. Já tentei varias coisa...mas o cursor teima em ir para o campo seguinte. Já tentei, Cancel = true, Cancel = False, criar um outro Text invisivel para que quando o foco fosse para ele ele retorna-se o foco para o Combo que quero...mas nada resolve. Já vasculhei a NET atraz de uma solução...mas tudo parece não funcionar.
Se alguem souber como resolver isso ou outro comando para usar agradeço.
Segue o código:
Private Sub REFUGO_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim db As Database
Dim rs As Recordset
On Error GoTo FalhaConexao
Set db = OpenDatabase(ThisWorkbook.Path & [Ô]\Banco Dados.xls[Ô], False, False, [Ô]Excel 8.0[Ô])
Set rs = db.OpenRecordset([Ô]Select * from [BANCO$][Ô])
[ô]Procura a OP no banco de dados e salva os dados
Do
On Error Resume Next
If rs([Ô]OP[Ô]).Value = CDbl(Principal.OP.Value) Then
rs.Edit
rs([Ô]REFUGO[Ô]).Value = rs([Ô]REFUGO[Ô]).Value & Me.REFUGO.Value & [Ô];[Ô]
rs([Ô]CODIGOREF[Ô]).Value = rs([Ô]CODIGOREF[Ô]).Value & Me.CODREFUGO.Value & [Ô];[Ô]
rs.Update
rs.MoveNext
End If
rs.MoveNext
Loop Until rs.EOF
[ô]Fechar banco de dados
db.Close
Me.REFUGO.Value = [Ô][Ô]
[txt-color=#e80000]Me.CODREFUGO.SetFocus[/txt-color]
Me.CODREFUGO.Value = [Ô][Ô]
Exit Sub
FalhaConexao:
MsgBox [Ô]Não foi possÃvel conectar-se com o Banco de Dados. O Banco de Dados não existe não está no caminho informado.[Ô], vbInformation
Exit Sub
End Sub
Pelas ajudas...obrigado.
Sds,
Nei.
Me ajudem, por favor...
Tenho um Userform com varios campos.... em um dele um Combo é preenchido e logo e seguida um Text. Após o preenchimento do Text, a rotina abiaxo é executada e o cursor deveria voltar ao Combo. Porem isso não está acontecendo. Já tentei varias coisa...mas o cursor teima em ir para o campo seguinte. Já tentei, Cancel = true, Cancel = False, criar um outro Text invisivel para que quando o foco fosse para ele ele retorna-se o foco para o Combo que quero...mas nada resolve. Já vasculhei a NET atraz de uma solução...mas tudo parece não funcionar.
Se alguem souber como resolver isso ou outro comando para usar agradeço.
Segue o código:
Private Sub REFUGO_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim db As Database
Dim rs As Recordset
On Error GoTo FalhaConexao
Set db = OpenDatabase(ThisWorkbook.Path & [Ô]\Banco Dados.xls[Ô], False, False, [Ô]Excel 8.0[Ô])
Set rs = db.OpenRecordset([Ô]Select * from [BANCO$][Ô])
[ô]Procura a OP no banco de dados e salva os dados
Do
On Error Resume Next
If rs([Ô]OP[Ô]).Value = CDbl(Principal.OP.Value) Then
rs.Edit
rs([Ô]REFUGO[Ô]).Value = rs([Ô]REFUGO[Ô]).Value & Me.REFUGO.Value & [Ô];[Ô]
rs([Ô]CODIGOREF[Ô]).Value = rs([Ô]CODIGOREF[Ô]).Value & Me.CODREFUGO.Value & [Ô];[Ô]
rs.Update
rs.MoveNext
End If
rs.MoveNext
Loop Until rs.EOF
[ô]Fechar banco de dados
db.Close
Me.REFUGO.Value = [Ô][Ô]
[txt-color=#e80000]Me.CODREFUGO.SetFocus[/txt-color]
Me.CODREFUGO.Value = [Ô][Ô]
Exit Sub
FalhaConexao:
MsgBox [Ô]Não foi possÃvel conectar-se com o Banco de Dados. O Banco de Dados não existe não está no caminho informado.[Ô], vbInformation
Exit Sub
End Sub
Pelas ajudas...obrigado.
Sds,
Nei.
Você já reparou se o CODREFUGO esta Enabled = False, pois se estiver ele não vai receber o Foco
Outra dica é Limpar antes de Setar
Me.REFUGO.Value = [Ô][Ô]
Me.CODREFUGO.Value = [Ô][Ô]
Me.COdREFUGO.SetFocus
Verifique tambem a ordenação do TabIndex de cada componente, procure manter sempre em order
REFUGO é o seu TextBox? Se for coloque essa rotina no LostFocus do mesmo
Se não resolveu poste ai que estamos aqui pra ajudar!
Outra dica é Limpar antes de Setar
Me.REFUGO.Value = [Ô][Ô]
Me.CODREFUGO.Value = [Ô][Ô]
Me.COdREFUGO.SetFocus
Verifique tambem a ordenação do TabIndex de cada componente, procure manter sempre em order
REFUGO é o seu TextBox? Se for coloque essa rotina no LostFocus do mesmo
Se não resolveu poste ai que estamos aqui pra ajudar!
Desculpa a pergunta.
Mas esta usando uma ComboBox do VB6 ?
Se sim:
1º para LIMPAR (apagar) a lista dela você usa combo.clear ou apenas para limpar o texto que define o item anteriormente selecionado combo.text = [Ô][Ô]
2º usando o comando combo.setfocus no evento LOSTFOCUS do textbox ele pula direto para a combo ignorando a sequencia do tabindex
Mas esta usando uma ComboBox do VB6 ?
Se sim:
1º para LIMPAR (apagar) a lista dela você usa combo.clear ou apenas para limpar o texto que define o item anteriormente selecionado combo.text = [Ô][Ô]
2º usando o comando combo.setfocus no evento LOSTFOCUS do textbox ele pula direto para a combo ignorando a sequencia do tabindex
FILMAN,
O Combo CODREFUGO esta como Enabled = True. Coloquei na ordem que vc sugeriu e os TabIndex dos componentes estão certos, ou seja, na sequencia, mas não funcionou. Sim, REFUGO é o meu Text e é nele que está a rotina que mencionei, ou seja, ser preenchido e dar o ENTER a rotina roda.
O Text não tem a propriedade LOSTFOCUS, creio que seja porque estou usando o VBA do Excel e está propriedade não exista lá para os TextBox.
CASTELO
Estou usando o VBA do Excel..
Ainda estou com o problema. Mais alguma sugestão?
Obrigado,
O Combo CODREFUGO esta como Enabled = True. Coloquei na ordem que vc sugeriu e os TabIndex dos componentes estão certos, ou seja, na sequencia, mas não funcionou. Sim, REFUGO é o meu Text e é nele que está a rotina que mencionei, ou seja, ser preenchido e dar o ENTER a rotina roda.
O Text não tem a propriedade LOSTFOCUS, creio que seja porque estou usando o VBA do Excel e está propriedade não exista lá para os TextBox.
CASTELO
Estou usando o VBA do Excel..
Ainda estou com o problema. Mais alguma sugestão?
Obrigado,
Tenta Fazer o seguinte ao invés de colocar no BeforeUpdate do TextBox coloque no KeyDown
Ficaria assim
Caso ainda não de certo tire o Tratamento de erro de execute e verifique onde esta acusando o erro se é somente no SetFocus
Ficaria assim
Private Sub REFUGO_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = VbKeyReturn Then
Dim db As Database
Dim rs As Recordset
On Error GoTo FalhaConexao
Set db = OpenDatabase(ThisWorkbook.Path & [Ô]\Banco Dados.xls[Ô], False, False, [Ô]Excel 8.0[Ô])
Set rs = db.OpenRecordset([Ô]Select * from [BANCO$][Ô])
[ô]Procura a OP no banco de dados e salva os dados
Do
On Error Resume Next
If rs([Ô]OP[Ô]).Value = CDbl(Principal.OP.Value) Then
rs.Edit
rs([Ô]REFUGO[Ô]).Value = rs([Ô]REFUGO[Ô]).Value & Me.REFUGO.Value & [Ô];[Ô]
rs([Ô]CODIGOREF[Ô]).Value = rs([Ô]CODIGOREF[Ô]).Value & Me.CODREFUGO.Value & [Ô];[Ô]
rs.Update
rs.MoveNext
End If
rs.MoveNext
Loop Until rs.EOF
[ô]Fechar banco de dados
db.Close
Me.REFUGO.Value = [Ô][Ô]
Me.CODREFUGO.Value = [Ô][Ô]
Me.CODREFUGO.Enabled = True
Me.CODREFUGO.SetFocus
Exit Sub
End If
FalhaConexao:
MsgBox [Ô]Não foi possÃvel conectar-se com o Banco de Dados. O Banco de Dados não existe não está no caminho informado.[Ô], vbInformation
Exit Sub
End Sub
Caso ainda não de certo tire o Tratamento de erro de execute e verifique onde esta acusando o erro se é somente no SetFocus
FILMAN..
Não deu certo. quando eu entro com o valor, digamos 20, ele nem deixa eu digitar o [Ô]0[Ô] ele já sai executando o código. o If KeyCode = VbKeyReturn Then dá como falso e ele nem executa o resto do código.
estou na mesma....
Obrigado.
Não deu certo. quando eu entro com o valor, digamos 20, ele nem deixa eu digitar o [Ô]0[Ô] ele já sai executando o código. o If KeyCode = VbKeyReturn Then dá como falso e ele nem executa o resto do código.
estou na mesma....
Obrigado.
tenta mandar o foco para outro controle, para verificar.
Já mexi no VBA no excel a alguns tempos,
bom fiz um teste aqui (VBA EXCEL 2007)
1 form
2 text
1 combo
[ô]ao sair do combo obrigatoriamente esta indo para o textbox1
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1.SetFocus
End Sub
FIz um teste diferente aqui agora e gera erro...
[ô] ao entrar no textbox2 ele retorna o foco ao combobox1 e depois limpa o value, aqui funcionou.
Private Sub TextBox2_Enter()
Me.ComboBox1.SetFocus
Me.ComboBox1.Value = [Ô][Ô]
End Sub
Desconcidera esse TextBox2_Enter()
bom fiz um teste aqui (VBA EXCEL 2007)
1 form
2 text
1 combo
[ô]ao sair do combo obrigatoriamente esta indo para o textbox1
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1.SetFocus
End Sub
FIz um teste diferente aqui agora e gera erro...
[ô] ao entrar no textbox2 ele retorna o foco ao combobox1 e depois limpa o value, aqui funcionou.
Private Sub TextBox2_Enter()
Me.ComboBox1.SetFocus
Me.ComboBox1.Value = [Ô][Ô]
End Sub
Desconcidera esse TextBox2_Enter()
Amigo, é simples, coloca um DoEvents, ali onde mostro abaixo.
Me.CODREFUGO.Enabled = True
DoEvents
Me.CODREFUGO.SetFocus
Me.CODREFUGO.Enabled = True
DoEvents
Me.CODREFUGO.SetFocus
CASTELO
Quando vc diz que funcionou ai, isso me deixa mais intrigado. Eu não programei nada e nem existe nada em minha rotina que faça o VBA ignorar o comando SetFocus. Muito estranho...
NILSONTRES
Usei o comando DoEvents e não funcionou também.
o foco insiste em ir para o combo seguinte ao invês de voltar ao combo anterior.....
Não sei se é um problema crônico do VBA....talves no VB6 ou .NET funcione diferente.....
Valeu pela ajuda..
Fico no aguardo de um nova sugestão...
Obrigado galera..
Quando vc diz que funcionou ai, isso me deixa mais intrigado. Eu não programei nada e nem existe nada em minha rotina que faça o VBA ignorar o comando SetFocus. Muito estranho...
NILSONTRES
Usei o comando DoEvents e não funcionou também.
o foco insiste em ir para o combo seguinte ao invês de voltar ao combo anterior.....
Não sei se é um problema crônico do VBA....talves no VB6 ou .NET funcione diferente.....
Valeu pela ajuda..
Fico no aguardo de um nova sugestão...
Obrigado galera..
é complicado para tà disponibilizar apenas este form em arquivo separado ? se puder colocar ele online.
Tópico encerrado , respostas não são mais permitidas