Notifications
Clear all

[Resolvido] SetFocus não ativa o textbox (C/ANEXO)

8 Posts
2 Usuários
0 Reactions
1,938 Visualizações
Kaleo_rs
(@kaleo_rs)
Posts: 0
Trusted Member
Topic starter
 

Não estou conseguindo devolver o foco para o campo depois mostrar que é informado que o lançamento já foi feito.

Na primeira execução o cursor fica visível e piscando aguardando ser digitado a informação, ao teclar ENTER a função vai validar se os dados estão corretos, quando não está a função indica que está com inconsistência. Neste caso mudo a cor da textbox para vermelho, limpo a textbox e devolvo o foco para o campo.

Porém, o foco não ocorre, pois não consigo digitar nada, é como se o cursor ficasse perdido no "LIMBO", se teclo ENTRE o cursor vai para o próximo campo, ou se quero ativar o cursor no campo em QUESTÃO, preciso clicar com o mouse dentro do campo para mostrar o cursor.

PS: Já tentei só usando o comando CANCEL=TRUE, e só o comando SETFOCUS e os dois juntos invertendo a ordem de execução.

PASSO A PASSO para simular o problema:

Abra a planilha,

Ative as MACROS,

clique no botão LANÇAR ENTRADAS

No campo DATA informe 01/02/2022 o sistema já insere as "/"

No campo TP ENTRADA só tecle ENTER

No campo DESC informe 55000  vai abrir um outro FORM informando que esse lançamento já foi feito.

tecle no botão FECHAR o campo DESC vai ficar vermelho mas se consegue digitar nada. Clique no campo e digite 56000 para poder seguir.

Abaixo a rotina onde ocorre: 

Private Sub ENTRADA_DESC_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Me.ENTRADA_DESC.BackColor = &HFFFFFF
  ENTRADA_DESC_VALIDA (ENTRADA_DESC.Value) ' função que valida se a informação 
  ' xErro é uma variavel global 
  If xErro = "S" Then
      xErro = "N"
      Me.Controls("ENTRADA_DESC").BackColor = &HFF&
      ENTRADA_DESC.Value = ""
      Cancel = True
      Me.Controls("ENTRADA_DESC").SetFocus
      Exit Sub
  End If
End Sub
 
Postado : 26/02/2022 12:01 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

@Kaleo_rs, sugiro criar um modelo reduzido de seu workbook focando apenas na problemática encontrada, seguindo a consagrada prática de criar um modelo "Mínimo, Completo e Verificável" (como sugerido no S.O.)

Acompanhando seu passo-a-passo, já de início não encontrei o botão "LANÇAR ENTRADAS". Imagino que seja o botão "ENTRADA", aquele que está na planilha "Principal", é isso?

Se for isso,

Postado por: @kaleo_rs

...No campo DATA informe 01/02/2022...

no UserForm que surge, há dois campos "Data" e um "Data Tele". Não sei a qual vc se refere, mas já de pronto nenhum deles aceita entrar valores, portanto não deu pra avançar pra chegar no ponto onde vc descreve que tem dúvida.

E como há muitos Userforms, Planilhas, Módulos, etc., acaba ficando desanimador tentar destrinchar o sistema.

Anexe algo mais reduzido que tentaremos entender.

 

 
Postado : 02/03/2022 11:10 am
Kaleo_rs
(@kaleo_rs)
Posts: 0
Trusted Member
Topic starter
 

Ok, fiz um modelo mais reduzido.

PASSO A PASSO para simular o problema:

Abra a planilha,

Ative as MACROS,

Clique no botão LANÇAR ENTRADAS vai abrir o FORMULÁRIO

Clique no botão INCLUIR

Tecle ENTER, o campo DATA será preenchido e irá para o próximo campo

O campo TP. já está preenchido tecle ENTER para ir pro campo DESC

No campo DESC informe 55000, vai abrir um outro FORMULÁRIO mostrando que esse lançamento já foi feito.

Clique no botão FECHAR para fechar o FORMULÁRIO e o campo DESC vai ficar vermelho mas não se consegue digitar nada. Clique no campo para poder digite 56000 para poder seguir.

O PROBLEMA É QUE TEM QUE CLICAR NO CAMPO DESC PARA DIGITAR.

 
Postado : 03/03/2022 8:07 pm
Kaleo_rs
(@kaleo_rs)
Posts: 0
Trusted Member
Topic starter
 

@edsonbr, consegue me ajudar? Reduzi ao pondo de simular o erro.

 
Postado : 06/03/2022 10:38 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Pois é, @kaleo_rs, talvez não me fiz entender quando me referi a simplificar o modelo a um exemplo M/C/V.

De fato, seu arquivo agora reproduz o problema que vc citou. No entanto, tentar depurá-lo seguindo todo o caminho de execução do código da forma que está é extremamente trabalhoso para ser respondido em fórum, pois desvia para muitas sub-rotinas, dispara muitos eventos, muita redundância, códigos longos... enfim.

Mesmo assim vou dar um palpite e/ou sugestão: vc poderia usar o evento BeforeUpdate daquela TextBox limpando o controle e  atribuindo Cancel = True ao final caso o valor entrado seja inválido ou repetido.

Segue um exemplo [somente] disso que estou querendo dizer.

 
Postado : 07/03/2022 4:35 pm
Kaleo_rs
(@kaleo_rs)
Posts: 0
Trusted Member
Topic starter
 

@edsonbr, achei o que causa o problema, mas ao desativar a causa me gera um transtorno.

Ao chamar o formulário executo da seguinte forma... "LOAD USERFORM" e na sequência "USERFORM.SHOW VBMODELESS" ao remover "VBMODELESS" o comando SetFocus ativa o cursor no campo.

Porém, ao remover "VBMODELESS" o formulário não me permite minimizar somente o formulário, minimiza toda a planilha. As vezes é necessário olhar na planilha algum histórico de lançamento.

Alguma sugestão de comando para substituir o "VBMODELESS", quando chamar o formulário o mesmo não bloquei a planilha? 

 
Postado : 10/03/2022 3:48 pm
Kaleo_rs
(@kaleo_rs)
Posts: 0
Trusted Member
Topic starter
 

@edsonbr, depois de muito pesquisar e testar achei o problema.

Está relacionado ao comando vbModeless, ao qual ele permite mexer fora do formulário, ou seja, o foco não fica preso no formulário. Ao remover o comando vbModeless o SETFOCUS funcionou perfeitamente. O mesmo acontece o exemplo que você disponibilizou, fiz uma simulação.

Existe alguma forma de permitir mexer fora do formulário sem utilizar o vbModeless???

 
Postado : 24/03/2022 11:04 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Bom dia, @Kaleo_rs

Não pude dedicar tempo por esses dias aqui pro fórum. Com relação à sua questão de Userform ser de janela restrita ou não, embora não exista uma propriedade para alterar esse status via código, vc pode fazê-lo primeiro ocultando (.Hide) e em seguida reexibindo (.Show) com a alteração desejada para ShowModal (vbModal = True = bloqueada ou vbModeless = False = não restrita). Talvez seja necessário ajustar a posição que o Userform aparece na tela guardando o valor antes de esconder e reatribuindo na hora de reexibir pra ficar no mesmo lugar.

No exemplo anexo, o UF2 fica não restrito e quando é fechado volta o foco para a txtValor.

 
Postado : 29/03/2022 10:55 am