macro per data



  • macro per data
    di stefanmi (utente non iscritto) data: 16/08/2013 09:35:34

    vorrei aggiungere la data nella prima colonna con il nome del foglio, con nov-2007 ma con tutti gli altri mesi invece non prende il formato data e me lo inserisce come testo
     
    Sub Add_dates()
    '
    ' Add_dates Macro
    '
    
    '
        myDate = Left(ActiveSheet.Name, 7)
        Range("A1").Select
        Selection.EntireColumn.Insert
        ActiveCell.FormulaR1C1 = "Data"
        Selection.CurrentRegion.Select
        Selection.SpecialCells(xlCellTypeBlanks).Select
        Selection.FormulaR1C1 = myDate
        Range("A1").Select
    End Sub



  • di Grograman data: 16/08/2013 10:32:29

    Questo perchè l'editor VBA ragiona in inglese, quindi riconosce "Nov" in quanto "November".
    Se provi a rinominare il tuo foglio in "Jan2008" vedrai la differenza.

    Ad ogni modo ecco una variante sul tema:
     
    Option Explicit
    
    Sub Add_dates()
    Dim myDate As Date
    Dim i As Byte
    Dim x As Long
    Dim lngY As Long
    Dim intM As Integer
    With ActiveSheet
        lngY = Right(.Name, 4)
        For i = 1 To 12
            Debug.Print Format(DateSerial(1, i, 1), "mmm")
            If Left(.Name, 3) = Format(DateSerial(1, i, 1), "mmm") Then
                intM = i
                Exit For
            Else
                intM = 1
            End If
        Next
    
        .Range("A1").EntireColumn.Insert
        .Range("A1") = "Data"
        x = .Range("B" & .Rows.Count).End(xlUp).Row
         myDate = DateSerial(lngY, intM, 1)
        .Range("A2:A" & x) = myDate
        .Range("A2:A" & x).NumberFormat = "mmm-yyyy"
    End With
    End Sub
    
    



  • di stefanmi (utente non iscritto) data: 16/08/2013 11:07:19

    grazie mille



  • di stefanmi (utente non iscritto) data: 16/08/2013 11:22:31

    chiedo troppo se me la spieghi?



  • di Grograman data: 16/08/2013 11:49:26

    Figurati, aggiunti i commenti.
    E' un modo per farlo, non mi sono voluto discostare troppo dal codice originale.

    Sicuramente ci sono altre vie o magari funzioni di magheggio con le date che non conosco che si potrebbero applicare.
     
    Option Explicit
    
    Sub Add_dates()
    Dim myDate As Date 'variabile tipo data a cui daremo il valore che ci serve
    Dim i As Byte 'diventerà il mese, quindi massimo = 12, il tipo byte arriva fino a 255, più che sufficiente!
    Dim x As Long 'servirà per trovare l'ultima riga compilata
    Dim lngY As Long 'diventerà l'anno, basterebbe di tipo integer
    Dim intM As Integer 'diverrà il mese
    With ActiveSheet
        lngY = Right(.Name, 4) 'lngY diventa la parte destra, 4 caratteri, del nome del foglio
        For i = 1 To 12 'ciclo per determinare il mese
            '''se la parte sinistra del nome foglio è uguale alla conversoine in formato "mmm" di una data
            '''fittizia "01/i/0001" allora ecco trovato il mese
            If Left(.Name, 3) = Format(DateSerial(1, i, 1), "mmm") Then ''selezionare "dateserial" e premere F1 per maggiori info
                intM = i
                Exit For
            Else
                intM = 1
            End If
        Next
    
        .Range("A1").EntireColumn.Insert 'inserisco colonnA
        .Range("A1") = "Data" 'A1 diventa "Data"
        x = .Range("B" & .Rows.Count).End(xlUp).Row 'trovo ultima riga piena di colonna B
        myDate = DateSerial(lngY, intM, 1) 'come sopra, F1 per guida in linea per funzione Dateserial
        .Range("A2:A" & x) = myDate 'copio data nella colonna A
        .Range("A2:A" & x).NumberFormat = "mmm-yyyy" 'formatto come serve a te
    End With
    End Sub