Inserire solo determinate dati



  • Inserire solo determinate dati
    di maxmi (utente non iscritto) data: 18/10/2013 10:40:57

    Ciao a tutti
    chiedo il vostro aiuto.
    Con il codice qui sotto, attraverso delle textbox
    Inserisco dati su un foglio.
    Chiedevo se è possibile programmare la textbox7
    perché accetti solo un determinato testo/numeri.
    Mi spiego meglio,
    vorrei che la textbox7 si potesse scrivere solo
    in questo modo.
    La prima parola sarà sempre Sfuso,
    la seconda sarà un numero a una cifra o due cifre
    poi il numero sarà seguito da un punto, e una S
    e per ultima parola Pallet
    praticamente questo:
    Sfuso 17.S Pallet, l’unica cosa che cambierà saranno i numeri
    che potrebbero essere (14.S - 15.S - 9.S ecc)
    Grazie

     
    Private Sub CommandButton1_Click()
    Dim x As Integer                      'indice per lettura textbox
    Dim UltimaRiga As Long             'ultima riga utilizzata sul foglio
    Dim ultA As Long
        
        For x = 1 To 6
            
        'SALTO IL CONTROLLO DELLA TEXTBOX5
        If x = 5 Then x = 6
            
        If Me.Controls("TextBox" & x) = "" Then
            MsgBox "ATTENZIONE! Mancano i dati, Controllare", , "Controllo Dati"
            Me.Controls("TextBox" & x).SetFocus
            Exit Sub
        End If
    Next x
        
    With Worksheets("Foglio1")
            
        'SE LA TABELLA è VUOTA
        If .Range("A3").Value = "" Then
                
            'FORMATTO LA RIGA
            With .Range("A3:I3")
                .Font.Name = "MetaNormal-Roman"
                .Font.Size = 16
                .Font.ColorIndex = 3
                .Borders.LineStyle = xlContinuous
            End With
                
            'INSERISCO I VALORI IN MAIUSCOLO
            .Range("A" & UltimaRiga + 1).Value = UCase(Me.TextBox1.Value)     'TextBox1
            .Range("C" & UltimaRiga + 1).Value = Me.TextBox2.Value            'TextBox2
            .Range("F" & UltimaRiga + 1).Value = UCase(Me.TextBox3.Value)     'TextBox3
            .Range("F" & UltimaRiga + 1).Font.Bold = True
            .Range("G" & UltimaRiga + 1).Value = UCase(Me.TextBox4.Value)     'TextBox4
            .Range("H" & UltimaRiga + 1).Value = UCase(Me.TextBox5.Value)     'TextBox5
            .Range("I" & UltimaRiga + 1).Value = UCase(Me.TextBox6.Value)     'TextBox6
            .Range("I" & UltimaRiga + 1).Font.Bold = True
            .Range("B" & UltimaRiga + 1).Value = UCase(Me.TextBox7.Value)     'Textbox7
                
            'INSERISCO LA STRINGA E LA FORMATTO
            With .Range("A6")
                .Value = "ULTIMO AGGIORNAMENTO: " & Date & " - " & UCase(Me.TextBox1.Value)
                .Font.Name = "MetaNormal-Roman"
                .Font.Size = 16
            End With
            
        'SE LA TABELLA è GIà COMPILATA
        Else
                
            UltimaRiga = .Range("A1").End(xlDown).Row
                
            'TOLGO IL ROSSO DALL'ULTIMO INSERIMENTO
            .Range("A3:I" & UltimaRiga).Font.ColorIndex = 1
                
            'CANCELLO L'ULTIMA STRINGA INSERITA
            ultA = .Range("A" & Rows.Count).End(xlUp).Row
            .Range("A" & ultA).ClearContents
            
            'FORMATTO LA RIGA
            With .Range("A" & UltimaRiga + 1, "I" & UltimaRiga + 1)
                .Font.Name = "MetaNormal-Roman"
                .Font.Size = 12
                .Font.ColorIndex = 3
                .Borders.LineStyle = xlContinuous
            End With
                
            'INSERISCO I VALORI IN MAIUSCOLO
            .Range("A" & UltimaRiga + 1).Value = UCase(Me.TextBox1.Value)     'TextBox1
            .Range("C" & UltimaRiga + 1).Value = Me.TextBox2.Value            'TextBox2
            .Range("F" & UltimaRiga + 1).Value = UCase(Me.TextBox3.Value)     'TextBox3
            .Range("F" & UltimaRiga + 1).Font.Bold = True
            .Range("G" & UltimaRiga + 1).Value = UCase(Me.TextBox4.Value)     'TextBox4
            .Range("H" & UltimaRiga + 1).Value = UCase(Me.TextBox5.Value)     'TextBox5
            .Range("I" & UltimaRiga + 1).Value = UCase(Me.TextBox6.Value)     'TextBox6
            .Range("I" & UltimaRiga + 1).Font.Bold = True
            .Range("B" & UltimaRiga + 1).Value = UCase(Me.TextBox7.Value)      'Textbox7
                
            'INSERISCO LA STRINGA E LA FORMATTO
                
            With .Cells(UltimaRiga + 4, 1)
                .Value = "ULTIMO AGGIORNAMENTO: " & Date & " - " & UCase(Me.TextBox1.Value)
                .Font.Name = "MetaNormal-Roman"
                .Font.Size = 12
            End With
        End If
        
        '0RDINO LA TABELLA
        .Range("A2:I" & UltimaRiga + 1).Sort Key1:=.Range("A3"), _
        Order1:=xlAscending, _
        Header:=xlGuess, _
        OrderCustom:=1, _
        MatchCase:=False, _
        Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
            
        .Range("A1").Select
    End With
        
    For x = 1 To 6 'Ciclo di cancellazione dati
        Me.Controls("TextBox" & x) = ""
    Next x
      
    Me.TextBox1.SetFocus 'Ritorna il Cursore sul textbox1
    
    End Sub



  • di totygno71 (utente non iscritto) data: 18/10/2013 11:11:57

    Scusa la domanda... se il bisogno è scrivere solo quei tre dati preche non utilizzi una combo?



  • di maxmi (utente non iscritto) data: 18/10/2013 15:45:43

    ciao
    perchè non ho mai usato le combo
    e il vba lo so usare poco



  • di gaetanopr data: 18/10/2013 22:16:28

    Ciao maxmi, non entrando nel merito del codice, una soluzione potrebbe essere la seguente, tu nella textbox inserisci soltanto il valore numerico che verrà concatenato a tutto il resto.
    Naturalmente UCase non serve più
     
    .Range("B" & UltimaRiga + 1).Value = "SFUSO " & Me.TextBox7.Value & ".S PALLET"       'Textbox7



  • di maxmi (utente non iscritto) data: 19/10/2013 01:14:17

    ciao gaetanopr
    si era quello che volevo.
    Grazie di cuore