Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

EXCEL VBA: Problema conversione automatica formato data

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

EXCEL VBA: Problema conversione automatica formato data

Postdi giulio_radar » 03/09/12 10:33

Ciao a tutti,

ho un problema da risolvere.
Ho scritto un codice VBA per importare dei file .txt in excel. Fin qui, tutto bene. Su questi dati importati svolgo dei calcoli ma non capisco come mai alcuni valori vengono presi da excel come date anzichè come ore.
Il problema non si presenta sempre ma solo con valori di ore che "assomigliano a date".
Ad esempio:
16.10.53 viene letto come 16/10/1953. Non serve dire che tutti i calcoli vengono sbagliati, essendo un formato dierso.

Allego il codice VBA (commentato operazione per operazione, come da mia prassi) ed un file "incriminato":
GRAZIE A CHI SAPRA' AIUTARMI!! :D
Giulio


File incriminato:
https://rapidshare.com/files/994060524/6.txt

(si noti che nella colonna dei tempi chiamata TIME vi è una serie di orari che vengono importati male).

CODICE VBA:

Codice: Seleziona tutto
Sub Importa_TXT()
'----COSA FA LA MACRO
'----la macro importa dei file di testo con estensione .txt che contengono
'----le misurazioni di campi elettromagnetici e assegna ad ogni file di
'----di testo un foglio specifico avente lo stesso nome.


Dim i, n As Integer

Sheets("Dati_CEM").Select
'----seleziono la cella contenente la quantità di files .txt da processare
i = Cells(5, 3).Value

'----creo un ciclo FOR per creare tanti fogli quanti sono i file .txt da importare
'----nello stesso ciclo importo il file .txt
Dim z As Integer
z = 11

    For n = 1 To i

            '----aggiungo un nuovo foglio
            ActiveWorkbook.Worksheets.Add After:=Sheets(Sheets.Count)
            ActiveSheet.Name = n
               
            Dim percorso As String
            Dim nome_file As String
            Dim ENNE As String
           
            ENNE = n
                     
            '---Per semplicità i fogli sono tutti numerati nella cartella
            '---d'origine come: "cifra.txt"
           
            '---Inserisco le stringhe che contengono il percorso ed il
            '---nome file che cambierà essendo legato all'integer n
                     
            percorso = "\\Dati\dati\_COMUNE\CEM\MACRO\DATA\"
            nome_file = percorso & n & ".txt"
           
            '----------------------------------importo i files
           
            With ActiveSheet.QueryTables.Add(Connection:= _
                    "TEXT;" & nome_file, Destination:=Range _
                    ("$A$1"))
                        .Name = ENNE
                        .FieldNames = True
                        .RowNumbers = False
                        .FillAdjacentFormulas = False
                        .PreserveFormatting = True
                        .RefreshOnFileOpen = False
                        .RefreshStyle = xlInsertDeleteCells
                        .SavePassword = False
                        .SaveData = True
                        .AdjustColumnWidth = True
                        .RefreshPeriod = 0
                        .TextFilePromptOnRefresh = False
                        .TextFilePlatform = 932
                        .TextFileStartRow = 1
                        .TextFileParseType = xlDelimited
                        .TextFileTextQualifier = xlTextQualifierDoubleQuote
                        .TextFileConsecutiveDelimiter = True
                        .TextFileTabDelimiter = True
                        .TextFileSemicolonDelimiter = False
                        .TextFileCommaDelimiter = False
                        .TextFileSpaceDelimiter = True
                        .TextFileColumnDataTypes = Array(1, 4, 1, 1, 1, 1, 1, 1, 1)
                        .TextFileDecimalSeparator = "."
                        .TextFileThousandsSeparator = " "
                        .TextFileTrailingMinusNumbers = True
                        .Refresh BackgroundQuery:=False
                   
                        '-------------------------------------------------ROUTINE PER ESECUZIONI CALCOLI SU OGNI FOGLIO!
                                                        Dim w As Integer
                                                        Dim x, y As Integer

                                                        'mi sposto in A1
                                                        Range("A1").Select

                                                        'cerco la cella che contiene il valore DATE (sempre adiacente alla casella TIME)
                                                        Cells.Find(What:="DATE", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
                                                        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                                                        , SearchFormat:=False).Activate

                                                        'eseguo un offset di una colonna a dx per posizionarmi sulla colonna giusta
                                                        ActiveCell.Offset(columnoffset:=1).Activate

                                                        'eseguo un offset di una riga in basso per posizionarmi sulla riga giusta
                                                        ActiveCell.Offset(rowoffset:=1).Activate

                                                        'rilevo la posizione esatta della cella in cui sono capitato
                                                        x = ActiveCell.Row
                                                        y = ActiveCell.Column

                                                        'assegno all'intero w il valore di x per avere quindi il riferimento di partenza
                                                        w = x
                                                        '-----finchè la cella ha un valore diverso da zero il valore di w viene incrementato
                                                            While Cells(x, y).Value <> 0
               
                                                                    ActiveCell.Offset(rowoffset:=1).Activate
                                                                    x = x + 1
               
                                                            Wend

                                                        '------CALCOLI------------------------------|
                                                                '---1--calcolo il tempo (ultimo - primo)
                                                                Dim tempo As String

                                                                x = x - 1

                                                                Cells(x, y).NumberFormat = "h:mm:ss"
                                                                Cells(w, y).NumberFormat = "h:mm:ss"
                                                                Cells(2, 1).NumberFormat = "h:mm:ss"

                                                                Cells(2, 1).Value = Cells(x, y).Value - Cells(w, y).Value
                                                                tempo = Cells(2, 1).Value
                                                               
                                                                '--2---calcolo media
                                                                Dim media As String
                                                                                                                               
                                                                'prima di tutto mi posiziono sulla cella di inizio valori
                                                                'la cella esatta si trova shiftata di due colonne
                                                                'è sufficiente incrementare quindi il valore di y
                                                                'per posizionarsi correttamente

                                                                y = y + 2
                                                                Cells(w, y).Select

                                                                'devo definire l'intervallo su cui lavorare che sarà
                                                                'la differenza fra x e w

                                                                k = x - w

                                                                Set zona = Range(Cells(w, y), Cells(w, y).End(xlDown))
                                                                Cells(w, y).End(xlDown).Select
                                                                Cells(2, 2).Value = (WorksheetFunction.Sum(zona) / k)
                                                                Cells(2, 2).Select
                                                                '---diminuisco il numero dei decimali nella casella della media
                                                                Selection.NumberFormat = "0.000"
                                                                media = Cells(3, 1).Value
                                                               
                                                                '---3--trovo il valore massimo dell'intervallo
                                                                Dim val_max As String
                                                               
                                                                Cells(2, 3).Value = (WorksheetFunction.Max(zona))
                                                                val_max = Cells(2, 3)
                                                               
                                                                Range("A2:C2").Select
                                                                Selection.Copy
                                                               
                                                               
                                '-----mi sposto sul foglio Dati_CEM e scrivo i valori delle stringhe
                               
                               
                                Sheets("Dati_CEM").Select
                                Cells(z, 5).Value = ENNE
                                Cells(z, 6).Select
                                ActiveSheet.Paste
                               
                                'disattivo la selezione della copia
                                Application.CutCopyMode = False
                               
                               
                                'Cells(z, 5).Value = ENNE
                                'Cells(z, 6).Select
                                'Cells(z, 6).NumberFormat = "h:mm:ss"
                                'Cells(z, 6).Value = tempo
                                'Cells(z, 7).Value = media
                                'Cells(z, 7).Select
                                'Selection.NumberFormat = "0.000"
                                'Cells(z, 8).Value = val_max
                               
                               
                                '-----------------------------------------------------------------------------------------------
                   
                   
                   
                   
                   
                        End With
                       
                        z = z + 1
        Next
   
'----salvataggio del file ottenuto
Dim backup As String
Dim salva_come As String
Dim xls As String
   
Sheets("Dati_CEM").Select
salva_come = Cells(7, 3).Value
xls = ".xlsm"
backup = salva_come & xls
   

ActiveWorkbook.SaveAs Filename:= _
("\\Dati\dati\_COMUNE\CEM\MACRO\" & backup) _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
   
   
End Sub
Avatar utente
giulio_radar
Utente Junior
 
Post: 15
Iscritto il: 29/08/12 13:48

Sponsor
 

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi Anthony47 » 04/09/12 01:44

Nel txt che hai allegato io vedo che il separatore orario e' il classico "duepunti":

Immagine

Uploaded with ImageShack.us

Comunque in questi casi la cosa piu' semplice e' dichiarare il campo Text, modificando le costanti xlColumnDataType di TextFileColumnDataTypes:
Codice: Seleziona tutto
.TextFileColumnDataTypes = Array(4, 2, etc etc)   

(primo campo Data DMY, secondo campo Text, altri campi invariati)

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi giulio_radar » 04/09/12 12:52

Cia Anthony,

intanto grazie per il tuo aiuto. Purtroppo il problema permane. Infatti la macro si pianta subito sul primo foglio importato e più precisamente sull'istruzione:
Cells(2, 1).Value = Cells(x, y).Value - Cells(w, y).Value

riportando il seguente errore:
"errore di run-time '13': tipo non corrispondente".

Più che altro non capisco come sia possibile visto che il formato con cui Excel compila quella colonna di valori è corretto ed inoltre utilizzabile per i calcoli. Anche la cella di destinazione ha una formattazione corretta. Almeno....procedendo manualmente non vi sono problemi.

Che sia un bug?!
In ogni caso grazie ancora per aver dedicato il tuo tempo su questa cosa.
Apprezzo molto questa community.
Un saluto
Giulio
Avatar utente
giulio_radar
Utente Junior
 
Post: 15
Iscritto il: 29/08/12 13:48

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi Anthony47 » 04/09/12 15:37

Le celle che usi per le sottrazioni, se hai aderito al suggerimento che ti ho dato, contengono "stringhe", che non possono essere usate in una differenza; da qui l' errore "tipo non corrispondente".
Teoricamente le stringhe potrebbero essere convertite in orario usando la funzione TimeValue, cioe' trasformando la riga in errore in Cells(2, 1).Value = TimeValue(Cells(x, y).Value) - TimeValue(Cells(w, y).Value)

Tuttavia immagino che ti farebbe comodo se quella colonne di stringhe venisse effettivamente trasformata in Orari, quindi ti propongo di variare una parte dl tuo codice in

Codice: Seleziona tutto
'tuo codice
'eseguo un offset di una colonna a dx per posizionarmi sulla colonna giusta
    ActiveCell.Offset(columnoffset:=1).Activate

'eseguo un offset di una riga in basso per posizionarmi sulla riga giusta
    ActiveCell.Offset(rowoffset:=1).Activate

'rilevo la posizione esatta della cella in cui sono capitato
        ActiveCell.NumberFormat = "h:mm:ss"
        ActiveCell.Value = TimeValue(ActiveCell.Value)
                                                   
        x = ActiveCell.Row
        y = ActiveCell.Column

'assegno all'intero w il valore di x per avere quindi il riferimento di partenza
        w = x
'-----finchè la cella ha un valore diverso da zero il valore di w viene incrementato
        While Cells(x, y).Value <> 0
             ActiveCell.Offset(rowoffset:=1).Activate
             ActiveCell.NumberFormat = "h:mm:ss"
             If ActiveCell.Value <> "" Then ActiveCell.Value = TimeValue(ActiveCell.Value)
             x = x + 1
        Wend

'------CALCOLI------------------------------|
'segue il tuo codice

Il codice e' disottimizzato, ma ti faccio i complimenti per essere arrivato alla soluzione che ti interessava; come unica variante ti chiedo di sostituire le due righe
ActiveCell.Offset(columnoffset:=1).Activate / ActiveCell.Offset(rowoffset:=1).Activate
In una unica riga
Codice: Seleziona tutto
ActiveCell.Offset(1,1).Activate


Prova e fai sapere, ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi giulio_radar » 04/09/12 16:08

Ciao Anthony,

grazie per il complimento, ma credo che le conoscenze delle persone che mi stanno aiutando su questo forum siano ben più elevate delle mie e spero di poter imparare ancora anche grazie ai vostri suggerimenti/aiuti. Spesso mi rendo conto che sono un po' "grezzo" e scrivo codici "sporchi" (io li chiamo così), ma tutto sommato credo che si debba partire da qualche parte, no?

Dunque venendo a noi:
ho apportato la modifica come mi hai consigliato, ma il problema si ripresenta identicamene sull'istruzione:
ActiveCell.Value = TimeValue(ActiveCell.Value)

Stesso errore di prima.

Ho provato anche a commentare e così escludere i seguenti comandi (per vedere se per caso fosse lì il problema):
ActiveCell.NumberFormat = "h:mm:ss"
ActiveCell.Value = TimeValue(ActiveCell.Value)

ed introdurre solo il comando sulle celle utilizzando la funzione timevalue ma....niente da fare. Non ne vuole sapere.

La cosa che mi fa impazzire è l'impossibilità di definire il formato del file .txt nel momento in cui lo si apre. Sarebbe facilissimo continuare con la colonna formattata in modo corretto sin da subito ed invece le possibilità sono solo testo o data. Assurdo (o sto prendendo un granchio?).

Comunque grazie davvero per continuare ad aiutarmi.
Lo apprezzo moltissimo.
Un saluto
Giulio
Avatar utente
giulio_radar
Utente Junior
 
Post: 15
Iscritto il: 29/08/12 13:48

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi Anthony47 » 04/09/12 16:25

Ho collaudato quanto proposto col tuo file, sia nella versione originale (separatore orario=duepunti) sia dopo averlo sostituito col punto.
Ma tu la colonna B l' hai importata come testo? Inoltre quando hai quell' errore, se vai sul foglio excel (lasciando la macro in debug) quale e' la cella selezionata e quale e' il suo contenuto?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi giulio_radar » 06/09/12 09:30

Ciao Anthony,

Io lascio che la colonna B sia formattata da excel senza specificare nulla. Il programma (quando non esegue l'antipatica conversione di cui stiamo discutendo da giorni) assegna in maniera autonoma il formato "personalizzato" (h.mm.ss).

In questo caso la macro si pianta in corrispondenza della cella B24 del primo foglio della serie dei .txt che dovrebbe importare.
Il contenuto della cella dove si ha il blocco è un formato personalizzato "h.mm.ss" ed è il seguente numero (a titolo di esempio): "15.22.24".

Dal mio punto di vista è piuttosto strano che si pianti lì non appena ha eseguito l'istruzione:
ActiveCell.NumberFormat = "h:mm:ss"

Il comando:
ActiveCell.Value = TimeValue(ActiveCell.Value)
è dove la macro va in frantumi... :aaah

Quello che sto pensando ora, riguardo le cause che scatenano il blocco va in queste direzioni:
a) la funzione Timevalue ha bisogno di una libreria aggiuntiva non ancora caricata sul mio excel
b) escludendo la prima, forse, Timevalue è ridondante essendo stato definito nella riga superiore il formato. Quindi proverò ad eliminare quella riga e vedere cosa succede

Tu cosa ne pensi???? :?:
Grazie ancora
Un caro saluto
Avatar utente
giulio_radar
Utente Junior
 
Post: 15
Iscritto il: 29/08/12 13:48

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi Anthony47 » 06/09/12 14:28

TimeValue non ha bisogno di una libreria aggiuntiva.

La domanda principale era pero' se avevi modificato il codice della macro affinche' la colonna Time fosse importata come Testo, come ti avevo chiesto di fare qui viewtopic.php?f=26&t=96767&p=555355#p555198 :
Comunque in questi casi la cosa piu' semplice e' dichiarare il campo Text, modificando le costanti xlColumnDataType di TextFileColumnDataTypes:

Codice: Seleziona tutto
    .TextFileColumnDataTypes = Array(4, 2, etc etc)   


(primo campo Data DMY, secondo campo Text, altri campi invariati)

Perche' se non hai fatto questo allora il formato della cella che TimeValue va a processare e' imprevedibile mentre TimeValue si aspetta di trovare un testo.
Puo' essere utile pubblicare il testo della macro aggiornata, sempre con l' equivoco che io dispongo solo di un txt di prova dove gli orari sono in formato hh:mm:ss (ne ho creato io un altro in formato hh.mm.ss).

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi giulio_radar » 06/09/12 14:55

Ciao Anthony,

hai ragione, mi sono scordato di mantenere la modifica proposta sull'assegnare il formato testo.
Ho appena fatto girare la macro e... :aaah ....si pianta su:
Cells(2, 1).Value = TimeValue(Cells(x, y).Value) - TimeValue(Cells(w, y).Value)

Il formato in uscita sulle celle in questione è sempre quello: "personalizzato" - h.mm.ss

Non so proprio dove sbattere la testa. Considera che tutti i file .txt, nonostante non sempre siano impaginati sempre nello stesso modo, conservano SEMPRE gli orari con il formato "hh:mm:ss".

In ogni caso ecco il codice aggiornato:
Codice: Seleziona tutto
Sub Importa_TXT()
'----COSA FA LA MACRO
'----la macro importa dei file di testo con estensione .txt che contengono
'----le misurazioni di campi elettromagnetici e assegna ad ogni file di
'----di testo un foglio specifico avente lo stesso nome.


Dim i, n As Integer

Sheets("Dati_CEM").Select
'----seleziono la cella contenente la quantità di files .txt da processare
i = Cells(5, 3).Value

'----creo un ciclo FOR per creare tanti fogli quanti sono i file .txt da importare
'----nello stesso ciclo importo il file .txt
Dim z As Integer
z = 11

    For n = 1 To i

            '----aggiungo un nuovo foglio
            ActiveWorkbook.Worksheets.Add After:=Sheets(Sheets.Count)
            ActiveSheet.Name = n
               
            Dim percorso As String
            Dim nome_file As String
            Dim ENNE As String
           
            ENNE = n
                     
            '---Per semplicità i fogli sono tutti numerati nella cartella
            '---d'origine come: "cifra.txt"
           
            '---Inserisco le stringhe che contengono il percorso ed il
            '---nome file che cambierà essendo legato all'integer n
                     
            percorso = "\\Dati\dati\_COMUNE\CEM\MACRO\DATA\"
            nome_file = percorso & n & ".txt"
           
            '----------------------------------importo i files
           
            With ActiveSheet.QueryTables.Add(Connection:= _
                    "TEXT;" & nome_file, Destination:=Range _
                    ("$A$1"))
                        .Name = ENNE
                        .FieldNames = True
                        .RowNumbers = False
                        .FillAdjacentFormulas = False
                        .PreserveFormatting = True
                        .RefreshOnFileOpen = False
                        .RefreshStyle = xlInsertDeleteCells
                        .SavePassword = False
                        .SaveData = True
                        .AdjustColumnWidth = True
                        .RefreshPeriod = 0
                        .TextFilePromptOnRefresh = False
                        .TextFilePlatform = 932
                        .TextFileStartRow = 1
                        .TextFileParseType = xlDelimited
                        .TextFileTextQualifier = xlTextQualifierDoubleQuote
                        .TextFileConsecutiveDelimiter = True
                        .TextFileTabDelimiter = True
                        .TextFileSemicolonDelimiter = False
                        .TextFileCommaDelimiter = False
                        .TextFileSpaceDelimiter = True
                        .TextFileColumnDataTypes = Array(4, 2, 1, 1, 1, 1, 1, 1, 1)
                        .TextFileDecimalSeparator = "."
                        .TextFileThousandsSeparator = " "
                        .TextFileTrailingMinusNumbers = True
                        .Refresh BackgroundQuery:=False
                   
                        '-------------------------------------------------ROUTINE PER ESECUZIONI CALCOLI SU OGNI FOGLIO!
                                                        Dim w As Integer
                                                        Dim x, y As Integer

                                                        'assegno ad un vettore i singoli valori di tempo t1, t2, t3, ..., tn

                                                        'mi sposto in A1
                                                        Range("A1").Select

                                                        'cerco la cella che contiene il valore DATE (sempre adiacente alla casella TIME)
                                                        Cells.Find(What:="DATE", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
                                                        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                                                        , SearchFormat:=False).Activate

                                                        'eseguo un offset di una colonna a dx per posizionarmi sulla colonna giusta
                                                        ActiveCell.Offset(1, 1).Activate
                                                       
                                                        'rilevo la posizione esatta della cella in cui sono capitato
                                                        ActiveCell.NumberFormat = "h:mm:ss"
                                                        ActiveCell.Value = TimeValue(ActiveCell.Value)
                                                       
                                                        x = ActiveCell.Row
                                                        y = ActiveCell.Column

                                                        'assegno all'intero i il valore di x per avere quindi il riferimento di partenza
                                                        w = x
                                                        '-----finchè la cella ha un valore diverso da zero il valore di i viene incrementato
                                                            While Cells(x, y).Value <> 0
                                                                    ActiveCell.Offset(rowoffset:=1).Activate
                                                                    ActiveCell.NumberFormat = "h:mm:ss"
                                                                    If ActiveCell.Value <> "" Then ActiveCell.Value = TimeValue(ActiveCell.Value)
                                                                   
                                                                    'ActiveCell.Offset(rowoffset:=1).Activate
                                                                    x = x + 1
               
                                                            Wend

                                                        '------CALCOLI------------------------------|
                                                                '---1--calcolo il tempo (ultimo - primo)
                                                                Dim tempo As String

                                                                x = x - 1

                                                                Cells(x, y).NumberFormat = "h:mm:ss"
                                                                Cells(w, y).NumberFormat = "h:mm:ss"
                                                                Cells(2, 1).NumberFormat = "h:mm:ss"

                                                                Cells(2, 1).Value = TimeValue(Cells(x, y).Value) - TimeValue(Cells(w, y).Value)
                                                               
                                                                tempo = Cells(2, 1).Value
                                                               
                                                                '--2---calcolo media
                                                                Dim media As String
                                                                                                                               
                                                                'prima di tutto mi posiziono sulla cella di inizio valori
                                                                'la cella esatta si trova shiftata di due colonne
                                                                'è sufficiente incrementare quindi il valore di y
                                                                'per posizionarsi correttamente

                                                                y = y + 2
                                                                Cells(w, y).Select

                                                                'devo definire l'intervallo su cui lavorare che sarà
                                                                'la differenza fra x e i

                                                                k = x - w

                                                                Set zona = Range(Cells(w, y), Cells(w, y).End(xlDown))
                                                                Cells(w, y).End(xlDown).Select
                                                                Cells(2, 2).Value = (WorksheetFunction.Sum(zona) / k)
                                                                Cells(2, 2).Select
                                                                '---diminuisco il numero dei decimali nella casella della media
                                                                Selection.NumberFormat = "0.000"
                                                                media = Cells(3, 1).Value
                                                               
                                                                '---3--trovo il valore massimo dell'intervallo
                                                                Dim val_max As String
                                                               
                                                                Cells(2, 3).Value = (WorksheetFunction.Max(zona))
                                                                val_max = Cells(2, 3)
                                                               
                                                                Range("A2:C2").Select
                                                                Selection.Copy
                                                               
                                                               
                                '-----mi sposto sul foglio Dati_CEM e scrivo i valori delle stringhe
                                '-----ENNE, tempo, media, val_max
                               
                                Sheets("Dati_CEM").Select
                                Cells(z, 5).Value = ENNE
                                Cells(z, 6).Select
                                ActiveSheet.Paste
                               
                                'disattivo la selezione della copia
                                Application.CutCopyMode = False
                               
                               
                                'Cells(z, 5).Value = ENNE
                                'Cells(z, 6).Select
                                'Cells(z, 6).NumberFormat = "h:mm:ss"
                                'Cells(z, 6).Value = tempo
                                'Cells(z, 7).Value = media
                                'Cells(z, 7).Select
                                'Selection.NumberFormat = "0.000"
                                'Cells(z, 8).Value = val_max
                               
                               
                                '-----------------------------------------------------------------------------------------------
                   
                   
                   
                   
                   
                        End With
                       
                        z = z + 1
        Next
   
'----salvataggio del file ottenuto
Dim backup As String
Dim salva_come As String
Dim xls As String
   
Sheets("Dati_CEM").Select
salva_come = Cells(7, 3).Value
xls = ".xlsm"
backup = salva_come & xls
   
'---salvo per sicurezza anche una copia di backup
ActiveWorkbook.SaveAs Filename:= _
("\\Dati\dati\_COMUNE\CEM\MACRO\" & backup) _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
   
   
End Sub

Ancora grazie. :)
Un saluto
Giulio
Avatar utente
giulio_radar
Utente Junior
 
Post: 15
Iscritto il: 29/08/12 13:48

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi Anthony47 » 06/09/12 15:23

L' istruzione che va in errore non dovrebbe esserci; essa era una "teorica soluzione" avendo importato la colonna in formato Text, salvo che poi "praticamente" ti avevo fatto trasformare i dati importati da Text a Orario.
Quindi la riga che va in errore devi riportarla all' origine: NON
Cells(2, 1).Value = TimeValue(Cells(x, y).Value) - TimeValue(Cells(w, y).Value)
MA
Cells(2, 1).Value = Cells(x, y).Value - Cells(w, y).Value

Ti prego di usare il "tag" Code quando pubblichi un listing: selezioni il listato, premi in tasto Code in testa alla finestra di scrittura.
Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL VBA: Problema conversione automatica formato data

Postdi giulio_radar » 06/09/12 15:36

Anthony!

Scusami per la questione TAG, non lo sapevo ed ora che lo so starò attento.

Comunque sia....FUNZIONAAAAA! :lol:

Non so come ringraziarti, io non ci sarei arrivato in così poco tempo (sempre ammesso che ci sarei arrivato).
Davvero GRAZIE 1000 per aver dedicato il tuo tempo ad aiutarmi.

Un saluto
Giulio
Avatar utente
giulio_radar
Utente Junior
 
Post: 15
Iscritto il: 29/08/12 13:48


Torna a Applicazioni Office Windows


Topic correlati a "EXCEL VBA: Problema conversione automatica formato data":

Problema Windows 10
Autore: asso1998
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti