SetFocus não ativa ...
 
Compartilhar:
Notifications
Clear all

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

Página 1 / 2

Kaleo_rs
Posts: 89
Registered
Topic starter
(@kaleo_rs)
Trusted Member
Entrou: 8 anos atrás

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
Responder
7 Respostas
EdsonBR
Posts: 1005
Moderator
(@edsonbr)
Especialista do Excel
Entrou: 7 anos atrás

@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.

 

Responder
Kaleo_rs
Posts: 89
Registered
Topic starter
(@kaleo_rs)
Trusted Member
Entrou: 8 anos atrás

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.

Responder
Kaleo_rs
Posts: 89
Registered
Topic starter
(@kaleo_rs)
Trusted Member
Entrou: 8 anos atrás

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

Responder
EdsonBR
Posts: 1005
Moderator
(@edsonbr)
Especialista do Excel
Entrou: 7 anos atrás

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.

Responder
Página 1 / 2
Compartilhar: