Inserire data da userform



  • Inserire data da userform
    di Zasso data: 24/06/2013 17:10:07

    Ciao a tutti,

    sto cercando di capire come creare una userform che mi permetta di inserire dei dati (in questo caso sottoforma di data gg/mm/aaaa) in una data cella.

    Per adesso sono riuscito (con il codice in allegato) ad inserire i dati, ma se io inserisco, ad esempio:

    "3813" Risultato "09/06/1910"
    "382013" Risultato "29/11/2945"
    "38013" Risultato "11/05/1984"
    "3082013 e 03082013" mi restituiscono ####### in quanto troppo grande.

    C'è possibilità di inserire la data nella forma 03/08/2013 senza che l'utente debba sapere la conversione della data in numero?

    Ciao e grazie
     
    Private Sub Cancel_Click()
    
    Unload Me
    
    End Sub
    
    Private Sub Ok_Click()
    
    Dim Num As String
      On Error GoTo Errore
      If TextBox1.Text = "" Then
        TextBox1.SetFocus
        Exit Sub
      End If
      Num = CDbl(TextBox1.Text) ' Qui può scatenarsi l'errore
      Cells(1, 5).Formula = Num
      Unload Me
      Exit Sub
    Errore:
      MsgBox "Occorre un dato numerico!", vbCritical, "Errore"
      With TextBox1
        .Text = ""
        .SetFocus
      End With
    Message2.Hide
    Message3.Show
    
    End Sub
    
    Private Sub TextBox1_Change()
    
    Cells(1, 5) = CDb1Textbox1
    
    End Sub
    
    Private Sub UserForm_Click()
    
    End Sub



  • di nichicanta (utente non iscritto) data: 24/06/2013 21:15:32

    Caro Zasso, io utilizzo questo codice in una textbox inserita su userform ( adattala al tuo caso) che man mano che si digita la data,la controlla, aggiunge le barre tra il giorno, il mese e l'anno visualizza il messaggio se non è compresa tra due annualità ( una di iniio e l'altra di fine)
    Fammi sapere, cerco anch'io di dare il mio contributo per chi ne ha necessità.
    Ti saluto.
     
    Private Sub TextBox7_change()
    On Error Resume Next
    X = Len(TextBox7)
    Y = LTrim(TextBox7.Text)
    D = TextBox7
    If D = "" Then
    Exit Sub
    End If
    If Left(D, 2) > 31 Then
    MsgBox "GIORNO ERRATO", vbCritical, "DATA"
    TextBox7.SelStart = 0
    TextBox7.SelLength = Len(TextBox7)
    TextBox7.SetFocus
    Exit Sub
    End If
    If X = 2 Then TextBox7 = Y & "/"
    If X = 4 Then Exit Sub
    If Mid(D, 4, 2) = "" Then Exit Sub
    If Mid(D, 4, 2) > 12 Then
    MsgBox "MESE ERRATO", vbCritical, "DATA"
    TextBox7.SelStart = 3
    TextBox7.SelLength = Len(TextBox7)
    TextBox7.SetFocus
    Exit Sub
    End If
    e = Left(D, 2)
    f = Mid(D, 4, 2)
    Select Case f
    Case "02"
    If e > 29 Then GoTo Mess
    Case "04", "06", "09", "11"
    If e > 30 Then GoTo Mess
    End Select
    If X = 5 Then
    TextBox7 = Y & "/"
    Exit Sub
    End If
    If X = 6 Then Exit Sub
    If X = 7 Then Exit Sub
    If X = 8 Then Exit Sub
    If X = 9 Then Exit Sub
    G = Mid(D, 7, 4)
    If G <= 2000 Or G >= 2101 Then
    MsgBox "L'anno deve essere tra il 2000 ed il 2100", vbCritical, "DATA"
    TextBox7.SelStart = 6
    TextBox7.SelLength = Len(TextBox7)
    TextBox7.SetFocus
    Exit Sub
    End If
    If IsDate(TextBox7) = False Then
    MsgBox "La data non è valida - Controllare mese, giorno e anno", vbCritical, "DATA"
    TextBox7.SelStart = 0
    TextBox7.SelLength = Len(TextBox7)
    TextBox7.SetFocus
    Exit Sub
    End If
    If X = 10 Then
    Exit Sub
    End If
    Exit Sub
    Mess:
    MsgBox "GIORNO ERRATO", vbCritical, "DATA"
    TextBox7.SelStart = 0
    TextBox7.SelLength = Len(TextBox7)
    TextBox7.SetFocus
    Set X = Nothing
    Set Y = Nothing
    Set D = Nothing
    Set e = Nothing
    Set f = Nothing
    Set G = Nothing
    Resume
    End Sub



  • di totygno71 (utente non iscritto) data: 24/06/2013 21:30:23

    Che ne pensi di un controllo calendario???



  • di Zasso data: 24/06/2013 21:46:36

    @nichicanta: Grazie, domani appena posso la testo

    @totygno71: cosa intendi?

    Ciao



  • di Vecchio Frac data: 24/06/2013 22:05:44

    @zasso
    ma tu intendi consentire all'utente di inserire una data senza dover digitare i separatori o due cifre per ogni elemento?
    il controllo calendario (che è un oggetto inseribile in una userform ed è disponibile nell'elenco dei controlli activex) potrebbe essere una soluzione, ma anche da codice si può fare qualcosa

    @nichi
    è buona cosa che aggiungi il tuo contributo :)
    ti invito a ripensare al codice senza utilizzare tutti quei GoTo...
    Anche la sezione "Mess:" contiene degli errori (di logica, non di sintassi).





  • di Zasso data: 25/06/2013 17:45:37

    @VecchioFrac:

    L'idea è quella di creare una macro per l'inserimento automatico di un nuovo loan dello stesso tipo del file che ho allegato.

    Quando l'utente fa partire la macro, il sistema gli chiede data d'inizio, di fine, tasso d'interesse, di primo pagamento interessi e se il pagamento è mensile, bi/tri/semestrale, ecc..

    Una volta raccolte tutte le informazioni e averle inserite nelle rispettive celle, provvederà a creare in automatico lo sheet.

    Avevo pensato ad una userform che avesse una struttura tipo questa:

    img855.imageshack.us/img855/3834/913.png

    Se potessi inserire il calendario invece di farlo scrivere a loro sarebbe anche meglio, in ogni caso mi basterebbe che inseriscano la data separando i dati con / o . (se lo faccio adesso mi dice che c'è un errore perchè devo inserire un valore numerico).

    Ciao e grazie