Olá senhores, espero que possam me ajudar. Eu estou começando a aprender então por enquanto coisas simples são um verdadeiro desafio para mim.
A minha duvida é se tem como combinar essas duas ações, AfterUpdate e KeyPress numa mesma Caixa de Texto.
Eu tentei mas acaba criando um loop.
Caixa_1 [Caixa de combinação - a tabela não é fixa ela pode ser alterada, quando o registro é salvo o novo nome é adicionado à tabela]
Caixa_2 [Caixa simples]
O que eu queria fazer era o seguinte:
Se a Caixa_1 estiver em branco ou for apagada e em seguida for pressionado Enter (vbKeyReturn), aparece uma mensagem de alerta avisando que está em branco.
Se a Caixa_1 estiver em branco ou for apagada e em seguida perder o foco (LostFocus), não deve acontecer nada, inclusive o foco deve acompanhar.
Se a Caixa_1 for escrita ou alterada e em seguida for pressionado Enter (vbKeyReturn), muda o foco para a Caixa_2
Se a Caixa_1 for selecionado um nome diferente ou o mesmo muda o foco para Caixa_2
A mesma coisa ocorreria na Caixa_2, só que ao invés de mudar o foco quando fosse escrito algo, ele verificaria se as duas caixas estão escritas e então perguntaria se quer salvar vbYesNo.
Um outro detalhe, ele só permitiria salvar se ambas as Caixas estiverem escritas.
O código que eu tentei fazer ficou assim.
Private Sub Caixa_1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
If IsNull(Me.Caixa_1) Or Me.Caixa_1 = "" Then
MsgBox "Escreva um texto"
Me.Caixa_1.SetFocus
Else
Me.Caixa_2.SetFocus
End If
End If
End Sub
Private Sub Caixa_1_AfterUpdate()
If IsNull(Me.Caixa_1) Or Me.Caixa_1.text = "" Then
MsgBox "Escreva um texto"
Me.Caixa_1.SetFocus
Else
Me.Caixa_2.SetFocus
End If
End Sub
Private Sub Caixa_2_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
If IsNull(Me.Caixa_2) Or Me.Caixa_2 = "" Then
MsgBox "Escreva um texto"
Me.Caixa_2.SetFocus
Else
If IsNull(Me.Caixa_1) Or Me.Caixa_1.text = "" Then
MsgBox "Caixa_1 e Caixa_2 Escritos para Salvar"
Me.Caixa_1.SetFocus
Else
MsgBox "Mensagem para salvar"
End If
End If
End If
End Sub
Private Sub Caixa_2_AfterUpdate()
If IsNull(Me.Caixa_2) Or Me.Caixa_2.text = "" Then
MsgBox "Escreva um texto"
Me.Caixa_2.SetFocus
Else
If IsNull(Me.Caixa_1) Or Me.Caixa_1.text = "" Then
MsgBox "Caixa_1 e Caixa_2 Escritos para Salvar"
Me.Caixa_1.SetFocus
Else
MsgBox "Mensagem para salvar"
End If
End If
End Sub
O que que acontece, quando é feita alguma alteração apertando Enter ele executa tanto o AfterUpdate como o KeyPress, inclusive estendendo a ação para a próxima sub.
Em um form novo se na Caixa_1 for escrito um texto e apertar Enter, o que se esperaria é que o foco parasse em Caixa_2, mas as vezes acontece de parecer que Enter foi acionado também em Caixa_2, como essa está em branco aparece a mensagem para escrever um texto. Ou se for o caso de Caixa_2 contiver um texto ai a ação é a segunda mensagem [que seria o comando para salvar].
Mais uma vez agradeço bastante quem puder ajudar nessa duvida =D.
A minha duvida é se tem como combinar essas duas ações, AfterUpdate e KeyPress numa mesma Caixa de Texto.
Eu tentei mas acaba criando um loop.
Caixa_1 [Caixa de combinação - a tabela não é fixa ela pode ser alterada, quando o registro é salvo o novo nome é adicionado à tabela]
Caixa_2 [Caixa simples]
O que eu queria fazer era o seguinte:
Se a Caixa_1 estiver em branco ou for apagada e em seguida for pressionado Enter (vbKeyReturn), aparece uma mensagem de alerta avisando que está em branco.
Se a Caixa_1 estiver em branco ou for apagada e em seguida perder o foco (LostFocus), não deve acontecer nada, inclusive o foco deve acompanhar.
Se a Caixa_1 for escrita ou alterada e em seguida for pressionado Enter (vbKeyReturn), muda o foco para a Caixa_2
Se a Caixa_1 for selecionado um nome diferente ou o mesmo muda o foco para Caixa_2
A mesma coisa ocorreria na Caixa_2, só que ao invés de mudar o foco quando fosse escrito algo, ele verificaria se as duas caixas estão escritas e então perguntaria se quer salvar vbYesNo.
Um outro detalhe, ele só permitiria salvar se ambas as Caixas estiverem escritas.
O código que eu tentei fazer ficou assim.
Private Sub Caixa_1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
If IsNull(Me.Caixa_1) Or Me.Caixa_1 = "" Then
MsgBox "Escreva um texto"
Me.Caixa_1.SetFocus
Else
Me.Caixa_2.SetFocus
End If
End If
End Sub
Private Sub Caixa_1_AfterUpdate()
If IsNull(Me.Caixa_1) Or Me.Caixa_1.text = "" Then
MsgBox "Escreva um texto"
Me.Caixa_1.SetFocus
Else
Me.Caixa_2.SetFocus
End If
End Sub
Private Sub Caixa_2_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
If IsNull(Me.Caixa_2) Or Me.Caixa_2 = "" Then
MsgBox "Escreva um texto"
Me.Caixa_2.SetFocus
Else
If IsNull(Me.Caixa_1) Or Me.Caixa_1.text = "" Then
MsgBox "Caixa_1 e Caixa_2 Escritos para Salvar"
Me.Caixa_1.SetFocus
Else
MsgBox "Mensagem para salvar"
End If
End If
End If
End Sub
Private Sub Caixa_2_AfterUpdate()
If IsNull(Me.Caixa_2) Or Me.Caixa_2.text = "" Then
MsgBox "Escreva um texto"
Me.Caixa_2.SetFocus
Else
If IsNull(Me.Caixa_1) Or Me.Caixa_1.text = "" Then
MsgBox "Caixa_1 e Caixa_2 Escritos para Salvar"
Me.Caixa_1.SetFocus
Else
MsgBox "Mensagem para salvar"
End If
End If
End Sub
O que que acontece, quando é feita alguma alteração apertando Enter ele executa tanto o AfterUpdate como o KeyPress, inclusive estendendo a ação para a próxima sub.
Em um form novo se na Caixa_1 for escrito um texto e apertar Enter, o que se esperaria é que o foco parasse em Caixa_2, mas as vezes acontece de parecer que Enter foi acionado também em Caixa_2, como essa está em branco aparece a mensagem para escrever um texto. Ou se for o caso de Caixa_2 contiver um texto ai a ação é a segunda mensagem [que seria o comando para salvar].
Mais uma vez agradeço bastante quem puder ajudar nessa duvida =D.