Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Errore su Funzione Trasforma 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

Errore su Funzione Trasforma Data

Postdi Francesco53 » 04/07/19 15:12

Buongiorno a tutto il forum, tempo addietro in questo post:
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109048

Anthony aveva creato una funzione per trasformare in data italiana, una data estesa in inglese,
purtroppo riguardando il files vedo che ad Agosto non riesce a lavorare la funzione nel giusto modo.
Potete aiutarmi a risolvere il problema?
Allego file esempio per rendere più chiara la difficoltà, se scorrete vedrete che Agosto non viene convertito nel modo giusto.
https://www.mediafire.com/file/yu48ym70m2tmnym/PcFacile.xlsb/file

Ringrazio chi può aiutarmi.
FRancesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: Errore su Funzione Trasforma Data

Postdi Marius44 » 04/07/19 21:08

Ciao
Non sono in grado di modificare la macro ma credo di aver individuato l'errore.
Alla fine ci sono queste righe di codice
Codice: Seleziona tutto
If IsDate(Trim(Replace(Replace(Replace(Replace(dtVal, "nd", "", , , vbTextCompare), "rd", "", , , vbTextCompare), "st", "", , , vbTextCompare), "th", "", , , vbTextCompare))) Then
    ConData = DateValue(Trim(Replace(Replace(Replace(Replace(dtVal, "nd", "", , , vbTextCompare), "rd", "", , , vbTextCompare), "st", "", , , vbTextCompare), "th", "", , , vbTextCompare)))
Else
    ConData = dtVal
End If

in base al quale la data che comprende agosto non è una data in quanto le varie funzioni TRIM e REPLACE eliminano le lettere "st" anche nel mese e non solo dopo il giorno.
Pertanto il 31st August 2018 diventa 31 agoo 2018 che, ovviamente, non viene considerata data e ripete il valore String di prima.

Sono certo che Anthony saprà trovare una scappatoia.
Spero di non aver detto c..... stupidaggini. Ciao,
Mario
Marius44
Utente Senior
 
Post: 459
Iscritto il: 07/09/15 22:00

Re: Errore su Funzione Trasforma Data

Postdi Marius44 » 04/07/19 21:19

Ciao ancora
Rimuginandoci sopra, una soluzione potrebbe essere questa:
Codice: Seleziona tutto
Function ConData(ByVal dtCell As Range, Optional ByVal iLang As Long = 0) As Variant
Dim dtVal As String, I As Long, J As Long, repArr, ubArr, langArr
'
'Utilizzo       =ConData(DataTestoOriginale [,opzionale: codice lingua])
'               Codice lingua originale: 0=Usa, 1=Francese, 2=Tedesco, 3=Spagnolo, 4=Italiano
'               La traduzione sara' sempre nella lingua "Locale"
'
dtVal = dtCell.Text
'Lingua orig:    US,   Fran,  Germ,  Span,  Ita
langArr = Array("409", "40C", "407", "C0A", "410")
repArr = Array("dddd", "ddd", "mmmm", "mmm")
ubArr = Array(7, 7, 12, 12)
For I = 0 To 3
    For J = 1 To ubArr(I)
        If I < 2 Then
            dtVal = Replace(dtVal, Application.Text(DateSerial(2018, 1, J), "[$-" & langArr(iLang) & "]" & repArr(I)) & " ", "", , , vbTextCompare)
        Else
            dtVal = Replace(dtVal, Application.Text(DateSerial(2018, J, 1), "[$-" & langArr(iLang) & "]" & repArr(I)), Format(DateSerial(2018, J, 1), repArr(I)), , , vbTextCompare)
        End If
    Next J
Next I

'codice aggiunto da Marius44  -----------------------------------------------
dt = Trim(Replace(Replace(Replace(Replace(dtVal, "nd", "", , , vbTextCompare), "rd", "", , , vbTextCompare), "st", "", , , vbTextCompare), "th", "", , , vbTextCompare))
If Mid(dt, 4, 4) = "agoo" Or Mid(dt, 3, 4) = "agoo" Then
 dtVal = Replace(dt, "agoo", "agosto", , , vbTextCompare)
End If
'fine aggiunta codice ----------------------------------------------------------

If IsDate(Trim(Replace(Replace(Replace(Replace(dtVal, "nd", "", , , vbTextCompare), "rd", "", , , vbTextCompare), "st", "", , , vbTextCompare), "th", "", , , vbTextCompare))) Then
    ConData = DateValue(Trim(Replace(Replace(Replace(Replace(dtVal, "nd", "", , , vbTextCompare), "rd", "", , , vbTextCompare), "st", "", , , vbTextCompare), "th", "", , , vbTextCompare)))
Else
    ConData = dtVal
End If
End Function


Prova e fai sapere (ma aspettiamo sempre suggerimenti più ... professionali da parte di Anthony).
Ciao,
Mario

PS - C'è un inghippo. Non la trasforma in data (cioè con le barre e il numero al posto del mese)
Ciao
Marius44
Utente Senior
 
Post: 459
Iscritto il: 07/09/15 22:00

Re: Errore su Funzione Trasforma Data

Postdi Francesco53 » 04/07/19 21:31

Ciao Marius, ti ringrazio per le tue indicazioni, hanno migliorato la situazione, solo che la data
mi appare come hai detto in questo modo:
01/09/2018
31 agosto 2018
'.................
2 agosto 2018
1 agosto 2018
31/07/2018
Purtroppo non riesce a trasformarla nel formato presente negli altri mesi.
Hai interpretato nella forma giusta l'errore, il ragionamento che hai fatto è corretto,
purtroppo però ancora non riesce a visualizzare nella forma corretta pur essendo il
formato celle impostato nel modo corretto.

Aspettando eventuali nuovi suggerimenti ti ringrazio,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45

Re: Errore su Funzione Trasforma Data

Postdi Zer0Kelvin » 04/07/19 22:13

Ciao a tutti.
Una possibile alternativa
Codice: Seleziona tutto
Option Explicit
Option Compare Text

Public Function ConvData(Data As Variant) As Variant

    Dim mColl As New Collection
    Dim M As Byte
    Dim Spl
    Dim Des As Variant
   
    Set mColl = New Collection
    For M = 1 To 12
        mColl.Add M, Array("january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december")(M - 1)
    Next M
    Spl = Split(Data, " ")
    If UBound(Spl) - LBound(Spl) = 3 Then
        For Each Des In Array("nd", "rd", "st", "th")
            Spl(1) = Replace(Spl(1), Des, "")
        Next Des
        ConvData = CDate(Spl(1) & "/" & mColl(Spl(2)) & "/" & Spl(3))
    End If
   
End Function
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 384
Iscritto il: 08/04/12 11:23

Re: Errore su Funzione Trasforma Data

Postdi Anthony47 » 05/07/19 02:00

Ho lavorato sui Replace contenuti nell'ultimo If /Else /Endif:
Codice: Seleziona tutto
If IsDate(Trim(Replace(Replace(Replace(Replace(dtVal, "2nd", "2", , 1, vbTextCompare), "3rd", "3", , 1, vbTextCompare), "1st", "1", 1, , vbTextCompare), "th", "", , 1, vbTextCompare))) Then
    ConData = DateValue(Trim(Replace(Replace(Replace(Replace(dtVal, "2nd", "2", , 1, vbTextCompare), "3rd", "3", , 1, vbTextCompare), "1st", "1", 1, , vbTextCompare), "th", "", , 1, vbTextCompare)))
Else
    ConData = dtVal
End If


La proposta di Z0K mi restituisce sempre 00/01/1900.
L'dea di Mario di "aggiustare" agoo in agosto e' anche buona, per funzionare appieno bisogna inserire la conversione DateValue:
Codice: Seleziona tutto
Else
    ConData = DateValue(dtVal)             'AGGIUNTO DateValue()


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: 16531
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Errore su Funzione Trasforma Data

Postdi Zer0Kelvin » 05/07/19 09:06

Ciao Anthony.
Ora non ho più il file ma la mia function, testata come UDF sul file di esempio fornito dall'OP, funziona perfettamente.
Se a te restituisce sempre 00/01/1900 significa probabilmente che l'espressione
Codice: Seleziona tutto
Spl(1) & "/" & mColl(Spl(2)) & "/" & Spl(3)
non è una data.

PS: hai usato
Codice: Seleziona tutto
Option Compare Text
?
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 384
Iscritto il: 08/04/12 11:23

Re: Errore su Funzione Trasforma Data

Postdi Francesco53 » 05/07/19 14:00

Ringrazio tutti per l'aiuto, purtroppo (probabilmente per mio errore nell'inserire la variazione suggerita da Anthony sulla modifica di Marius), dopo aver trasformato il tutto nella forma giusta, la macro si blocca in questa riga, allego immagine:

Immagine

Potete darmi qualche altra indicazione dove eventualmente sbaglio?
Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45

Re: Errore su Funzione Trasforma Data

Postdi Francesco53 » 05/07/19 15:11

Un saluto a tutti, ho risolto inserendo il seguente codice:

Codice: Seleziona tutto
Else
If dtVal = "" Then GoTo salta
    ConData = DateValue(dtVal)
salta:


Grazie per l'aiuto che mi avete dato,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 715
Iscritto il: 20/02/10 18:45

Re: Errore su Funzione Trasforma Data

Postdi Anthony47 » 05/07/19 15:40

Hai risolto, va bene cosi'

@Z0K: Ho copiato tutto il tuo codice in un nuovo modulo e poi ho usato la funzione sul file pubblicato da Francesco; ad esempio in B138 e' presente la (strana) stringa 17th agosto 2018; in J138 ho messo la formula
Codice: Seleziona tutto
=ConvData(B138)

Il risultato e' 0, che viene poi rappresentato come 00/01/1900

Il "problema, secondo me, sta in If UBound(Spl) - LBound(Spl) = 3 Then; poiche' UBound=2 e LBound=0 allora l'If non sara' mai vero e non partono le istruzioni che compilano il risultato.

Per funzionare e' necessario che la data sia scritta con uno spazio iniziale e tutta in inglese; tipo
Codice: Seleziona tutto
 17th august 2018


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: 16531
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Errore su Funzione Trasforma Data

Postdi Zer0Kelvin » 05/07/19 19:41

@Anthony: sì, infatti, perchè la function è predisposta per funzionare con una stringa nel formato:
giornosettimana giornomese mese anno
come nell'esempio che ho scaricato, in caso contrario non funziona
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 384
Iscritto il: 08/04/12 11:23

Re: Errore su Funzione Trasforma Data

Postdi Anthony47 » 05/07/19 23:40

Ah, tutto chiaro.
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: 16531
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Errore su Funzione Trasforma Data":

Errore 0.000000d
Autore: Eiannece
Forum: Software Windows
Risposte: 0

Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti