none
Localizar próxima TextBox vazia RRS feed

  • 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


    quarta-feira, 17 de maio de 2017 18:15

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
    

    quarta-feira, 17 de maio de 2017 21:03
  • 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    

    segunda-feira, 29 de maio de 2017 17:20
  • 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

    segunda-feira, 29 de maio de 2017 17:28