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

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

Página 2 / 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
Kaleo_rs
Posts: 89
Registered
Topic starter
(@kaleo_rs)
Trusted Member
Entrou: 8 anos atrás

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

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

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

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

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.

Responder
Página 2 / 2
Compartilhar: