Inquiridor
Localizar próxima TextBox vazia

Pergunta
-
Quero preencher a próxima TextBox vazia.
Tenho 16 TextBox dispostas em 4 linhas e 4 colunas.
Estou usando o código abaixo para realizar o preenchimento. Mas tem tanto If que ta dando pau! Este código já esta dentro de outro If.
If OptionButtonCred = True Then If txtClassificacao1.Text = Empty Then txtClassificacao1.Text = "C:" TextBox.SetFocus ElseIf txtClassificacao2.Text = Empty Then txtClassificacao2.Text = "C:" TextBox.SetFocus ElseIf txtClassificacao3.Text = Empty Then txtClassificacao3.Text = "C:" TextBox.SetFocus Else txtClassificacao4.Text = "C:" TextBox.SetFocus Exit Sub ElseIf OptionButtonDeb = True Then If txtClassificacao1.Text = Empty Then txtClassificacao1.Text = "D:" TextBox.SetFocus ElseIf txtClassificacao2.Text = Empty Then txtClassificacao2.Text = "D:" TextBox.SetFocus ElseIf txtClassificacao3.Text = Empty Then txtClassificacao3.Text = "D:" TextBox.SetFocus Else txtClassificacao4.Text = "D:" TextBox.SetFocus Exit Sub End If
Gostaria de um código mais limpo, algo do gênero abaixo
Select Case OptionButtonCred Case True 'a próxima TextBox Classificação vazia será txtClassificacaoi.Text = "C:" ,tal que {i=1,2,3,4} Else 'a próxima TextBox Classificação vazia será txtClassificacaoi.Text = "D:" ,tal que {i=1,2,3,4} End Select
Todas as Respostas
-
No exemplo abaixo eu criei um Quadro(Frame) e inserir o textbox dentro dele. Com isso você inseri dentro do procedimento Exit do TextBox a sequencia abaixo. Vê se serve.
Option Explicit Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Call ProxItem End Sub Sub ProxItem() Dim CtrlTB As Control For Each CtrlTB In Frame1.Controls If TypeName(CtrlTB) = "TextBox" Then If CtrlTB.Value = "" Then CtrlTB.SetFocus Exit Sub End If End If Next End Sub
-
Oi, Pietro.
Ainda não consegui realizar essa ação infelizmente.
Mas de qualquer forma, já agradeço pela dica da criação do Frame pois me ajudou em outro problema que eu estava tendo.
Descrevendo meu Formulário melhor para facilitar o entendimento:
Frame1 - recebe informações e possui botão INSERIR
Frame 2 - possui as 16 TextBoxes
AÇÃO:
- Cliquei no botão INSERIR
- Apareceu a MsgBox confirmando o OptionButton selecionado (CRÉDITO ou DÉBITO)
- Quando eu clicar em OK na MsgBox, a primeira linha vazia do Frame2 vai receber:
("D:" ou "C:"*) (Nº da Conta) (Descrição) (Valor)
* "D:" se DÉBITO ou "C:" se CRÉDITO
-
Como esta o código do botão inserir:
'BOTÃO INSERIR Private Sub btnInserir_Click() Dim NumContaOuNivelVazio As VbMsgBoxResult Dim ValorEntradaVazio As VbMsgBoxResult Dim FinalizarInserir As VbMsgBoxResult 'Condicional do texto da MsgBox final do botão Inserir If OptionButtonCred = True Then ConfirmaOperacao = "Confirmar operação de CRÉDITO?" ElseIf OptionButtonDeb = True Then ConfirmaOperacao = "Confirmar operação de DÉBITO?" End If 'Condicional das MsgBox de alertas em erros de preenchimento If txtNumConta.Value = "" Or txtNivel1.Value = "" Then NumContaOuNivelVazio = MsgBox("Preencher N° DA CONTA e clicar em Pesquisar Conta", vbCritical, "PREENCHIMENTO OBRIGATÓRIO") txtNumConta.SetFocus txtNivel1.SetFocus ElseIf txtValorEntrada.Value = "" Then ValorEntradaVazio = MsgBox("O VALOR está vazio", vbCritical, "PREENCHIMENTO OBRIGATÓRIO") txtValorEntrada.SetFocus Else FinalizarInserir = MsgBox(ConfirmaOperacao, vbYesNo, "CONFIRMAR NATUREZA DA OPERAÇÃO") If FinalizarInserir = vbNo Then MsgBox "Corrija as informações e clique novamente em Inserir" Else ' Preenche a primeira TextBox vazia End If End If End Sub