Somar + 1 no TextBo...
 
Notifications
Clear all

Somar + 1 no TextBox com formatação

4 Posts
2 Usuários
0 Reactions
1,033 Visualizações
 lude
(@lude)
Posts: 6
Active Member
Topic starter
 

Boa noite a todos, meu nome é Luís e uso o Excel para elaborar planilhas a fim de facilitar meu serviço. Conheci o fórum pesquisando sobre assuntos no Google.
Tenho um formulário onde preciso inserir documentos pelos seus respectivos números, e como é um total de 40 numerados em sequencia, coloquei os TextBox para fazer essa soma de + 1 automático, pra preencher as demais.

Private Sub TextBoxAIinicial_Change()
'soma mais um na textbox
Text_AI1.Value = Val(TextBoxAIinicial.Value)
TextAI2.Value = Val(Text_AI1.Value) + Val(1)
TextAI3.Value = Val(TextAI2.Value) + Val(1)
TextAI4.Value = Val(TextAI3.Value) + Val(1)
End Sub

Obs: Mas preciso da seguinte formatação no TextBox – “Série, Faixa, Números” Ex: C-35-123456 (essa formatação já fiz).
Como posso fazer a soma de + 1 no número nas demais TextBox com essa formatação? Ficando então assim no TextBox:

TextBoxAIinicial – fica - C-35-123456
Text_AI1 – fica - C-35-123456
TextAI2 – fica - C-35-123457
TextAI3 – fica - C-35-123458
TextAI4 – fica - C-35-123459
E assim por diante até o TextAI40!
Segue o código que usei para formatar o TextBox que vai receber o valor:

Private Sub TextBoxAIinicial _KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Limita a Qde de caracteres
TextBoxAIinicial.MaxLength = 20

Select Case KeyAscii
Case 8, 48 To 57 ' BackSpace e numericos
If Len(TextBoxAIinicial) = 1 Or Len(TextBoxAIinicial) = 20 Then
TextBoxAIinicial.Text = TextBoxAIinicial.Text & "-"
SendKeys "{End}", False

ElseIf Len(TextBoxAIinicial) = 4 Then
TextBoxAIinicial.Text = TextBoxAIinicial.Text & "-"

'ElseIf Len(TextBoxAIinicial) = 11 Then
' TextBoxAIinicial.Text = TextBoxAIinicial.Text & "-"
SendKeys "{End}", False
End If

'Case Else ' o resto é travado
' KeyAscii = 0
End Select

Select Case KeyAscii
Case Asc("A") To Asc("Z"), Asc("a") To Asc("z")
If Len(TextBoxAIinicial) >= 1 Then
MsgBox "Favor inserir(C-35-1234567)Faixa-Série-Números!", vbCritical, "Erro de validação"
KeyAscii = 0
End If
Case Asc("0") To Asc("9")
If Len(TextBoxAIinicial) < 2 Then
MsgBox "Favor inserir a Faixa!(C-35-1234567)", vbCritical, "Erro de validação"
KeyAscii = 0
End If
Case Else
MsgBox "Favor inserir a Faixa-Série-Números!", vbCritical, "Erro de validação"
KeyAscii = 0

End Select
If KeyAscii = 14 Then ' tecla BackSpace apaga o último caracter da TextBox, a partir do último digitado.
Dim x As Integer
x = Len(TextBoxAIinicial.Text) - Pos
For i = 1 To x
TextBoxAIinicial.Text = Left(TextBoxAIinicial.Text, Len(TextBoxAIinicial.Text) - 1) ' apaga o último caracter
TextBoxAIinicial.SelStart = Pos
Next
End If

TextBox2.Text = TextBoxAIinicial.Text
TextBox3.Text = TextBox2.Text
TextBox4.Text = TextBox3.Text

End Sub

Obrigado pelo espaço!

 
Postado : 21/04/2016 4:41 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Montei um modelo veja se seria isto, ressaltando que todos os textbox que pretende preencher automaticamente teem de ter os nomes iguais só mudando o numero da seguinte forma:
TextAI1
TextAI2
TextAI3
TextAI4
.....

Text_AI1 - se resolver nomea-los desta forma tem de ajustar na rotina.

Somar Textbox com formato

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 21/04/2016 10:20 pm
 lude
(@lude)
Posts: 6
Active Member
Topic starter
 

Boa noite a todos e meus agradecimentos ao Mauro!
Da forma que ficou esta ótimo, mas não consigo configurar quando antes do número tiver zero Ex: C-35-012345 que no caso aparece C-35-12345. é possível continuar mostrando o zero caso houver?
Uma coisa que complicou mais ainda é o fato da Série e a Faixa "C-35-" não ser padrão ela vareia conforme o documento tipo "B-23-...ect pode ser qualquer letra e a faixa pode ser um número diferente também.
É possível as outras textbox serem preenchidas conforme for digitando?
Desculpa minha ignorância e agradeço sempre e sempre.

 
Postado : 23/04/2016 4:36 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Na questão principal, troque as rotinas pelas as abaixo :

Private Sub TextBoxAIinicial_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    Dim ctl As MSForms.Control
    Dim result As Double
    Dim sText
    
    MyString = TextBoxAIinicial.Value

    sText = Left(MyString, 5)
    
    If Len(MyString) < 11 Then
        
        MsgBox "Você digitou o numero incorreto !!!"
         
         With TextBoxAIinicial
           .Value = ""
        End With
    
    Else
        
        result = Right(MyString, 6)
        
        i = 1
        
        For Each ctl In Me.Controls
            If Len(CStr(result)) <= 6 Then
                
                If TypeName(ctl) = "TextBox" Then
                    sNomeTxt = Left(ctl.Name, 6)
                    
                    If sNomeTxt = "TextAI" Then
                       result = result + i
                       sResult2 = CStr(result)
                       sResult2 = CStr(String(6 - Len(sResult2), "0")) + CStr(sResult2)
                       ctl.Text = sText & sResult2
                    End If
                End If
            End If
        
        Next
    
    End If

End Sub

e :

Private Sub TextBoxAIinicial_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Limita a Qde de caracteres
    TextBoxAIinicial.MaxLength = 11

    Select Case KeyAscii
        Case 8, 48 To 57 ' BackSpace e numericos
        
            If Len(TextBoxAIinicial) = 1 Or Len(TextBoxAIinicial) = 5 Then
                TextBoxAIinicial.Text = TextBoxAIinicial.Text & "-"
                SendKeys "{End}", False
    
            ElseIf Len(TextBoxAIinicial) = 4 Then
                TextBoxAIinicial.Text = TextBoxAIinicial.Text & "-"
                SendKeys "{End}", False
            End If
    
    End Select

    Select Case KeyAscii
    
        Case Asc("A") To Asc("Z"), Asc("a") To Asc("z")
            If Len(TextBoxAIinicial) >= 1 Then
                MsgBox "Favor inserir(C-35-1234567)Faixa-Série-Números!", vbCritical, "Erro de validação"
                KeyAscii = 0
            End If
        Case Asc("0") To Asc("9")
            If Len(TextBoxAIinicial) < 2 Then
                MsgBox "Favor inserir a Faixa!(X-00-123456)", vbCritical, "Erro de validação"
                KeyAscii = 0
            End If
        Case Else
            MsgBox "Favor inserir a Faixa-Série-Números!", vbCritical, "Erro de validação"
            KeyAscii = 0
    
    End Select
    
    If KeyAscii = 14 Then ' tecla BackSpace apaga o último caracter da TextBox, a partir do último digitado.
        Dim x As Integer
        x = Len(TextBoxAIinicial.Text) - pos
            For i = 1 To x
                TextBoxAIinicial.Text = Left(TextBoxAIinicial.Text, Len(TextBoxAIinicial.Text) - 1) ' apaga o último caracter
                TextBoxAIinicial.SelStart = pos
            Next
    End If

End Sub

Agora não entendi o que quer com :
"É possível as outras textbox serem preenchidas conforme for digitando?", uma vez que os demais textbox são preenchidos automaticamente apos sair do TextBoxAIinicial.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/04/2016 8:51 pm