mettere gli slash automatici in una data



  • mettere gli slash automatici in una data
    di giulioc.tempestilli (utente non iscritto) data: 15/12/2017 09:11:36

    Sto cercando di trasformare, la stringa 29041966 in 29/04/1966 o 290466 in 29/04/66 o 1111 in 01/01/2011 o 20466 in 02/04/66 e ci riesco con la funzione sottostante
    Public Function prova(z As String)

    y = Len(Trim(z))
    If y = 8 Then GoTo a
    If y = 6 Then GoTo b
    If y = 4 Then GoTo c
    If InStr(1, z, "0") Then GoTo d
    a:
    giorno = Mid(z, 1, 2)
    mese = Mid(z, 3, 2)
    anno = Mid(z, 5, 4)
    prova = giorno & "/" & mese & "/" & anno
    Exit Function
    b:
    giorno = Mid(z, 1, 2)
    mese = Mid(z, 3, 2)
    anno = Mid(z, 5, 2)
    prova = giorno & "/" & mese & "/" & anno
    Exit Function
    c:
    giorno = "0" & Mid(z, 1, 1)
    mese = "0" & Mid(z, 2, 1)
    anno = Mid(z, 3, 2)
    prova = giorno & "/" & mese & "/" & anno
    Exit Function
    d:
    giorno = "0" & Mid(z, 1, 1)
    mese = Mid(z, 2, 2)
    anno = Mid(z, 4, 2)
    prova = giorno & "/" & mese & "/" & anno

    End Function
    questa funzione viere richiamata da Worksheet_Change inserito in un foglio in maniera tale che ad un range dato si attiva la funzione sovrastante.
    Il problema è che utilizzando Worksheet_Change la variabile z della funzione prova si valorizza con la data del seriale nella cella; ovvero z invece di valorizzarsi in 290466 si valorizza con 07/04/2695, dopo alcune ripetizioni corrette ovviamente risultando errato il processo.
    In realtà servirebbe di impedire di valorizzare z come data, ci sto provando da molto ma non ci riesco. Ci sono per caso degli aiuti?

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range
    '
    Set Rng = Range("A25:A500,e25:e500,g25:g500")
    '
    If Target.Value = "" Then Exit Sub
    If Not Intersect(Target, Rng) Is Nothing And Target.Count = 1 Then
    Application.EnableEvents = False
    Target.Value = prova(Target.Value)
    Application.EnableEvents = True
    End If
    '
    End Sub



  • di Luca73 data: 15/12/2017 10:34:00

    Ciao
    Allega un file con la tua macro e qualche caso da analizzare.
    Ciao
    Luca





  • di giulioc.tempestilli (utente non iscritto) data: 15/12/2017 10:50:14

    File di prova inserito



  • di Luca73 data: 15/12/2017 13:10:59

    Secondo me il tuo problema lo risolvi sostituendo la riga
    Target.Formula = prova(Target.Value) con

    Target.Formula = prova(Target.Formula)
    Ciao
    Luca





  • di Mister_x (utente non iscritto) data: 15/12/2017 14:58:38

    ciao

    un lavoro di questo tipo e' gia' stato fatto
    ti posto la sub() per studio per questo lavoro

    ciao
     
    ‘’Conversione della data da 21012016 a 21/01/2016
    Option Explicit
     Private Sub Worksheet_Change(ByVal Target As Range)
     If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
     On Error Resume Next
     Dim S_data As String
     Target.NumberFormat = "General"
     Application.EnableEvents = False
     Select Case Len(Target.Value)
     Case 4
     S_data = "0" & Mid(Target.Value, 1, 1) & "0" & Mid(Target.Value, 2, 1) & "20" & _
     Mid(Target.Value, 3, 2)
     Case 5
     S_data = "0" & Mid(Target.Value, 1, 3) & "20" & Mid(Target.Value, 4, 2)
     Case 6
     S_data = Mid(Target.Value, 1, 4) & "20" & Mid(Target.Value, 5, 2)
     Case 7
     S_data = "0" & Target
     Case 8
     S_data = Target.Value
     Case Else
     Cells(Target.Row, Target.Column) = "Dato Non valido"
     Application.EnableEvents = True
     Exit Sub
     End Select
     Target = DateSerial(Mid(S_data, 5, 4), Mid(S_data, 3, 2), Mid(S_data, 1, 2))
     Target.NumberFormat = "dd/mm/yyyy"
     Application.EnableEvents = True
     End Sub
    






  • di Albatros54 data: 15/12/2017 16:01:55

    prova a selezionare formato celle, non a data ma bensi come numero generico
    ciao
    albatros54





  • di giulioc.tempestilli (utente non iscritto) data: 19/12/2017 09:20:03

    Grazie