forzare formato data
Hai un problema con Excel? 
forzare formato data
di roberto21 data: 31/03/2013 23:38:22
Ho un paio di textbox nelle user form in cui l'utente dovrebbe scrivere delle date. Per semplificare il codice (per ora) mi limito a verificare se abbia inserito davvero una data, con isdate, per cui l'utente può scrivere 21/10/13 o 21/10/2013 senza problemi; se sbaglia, visualizzo un msgbox e lascio lì il cursore, invitandolo a riprovare.
La data immessa viene trasferita in una cella del database, la cui colonna relativa è stata preventivamente formattata come data, gg/mm/aaaa. Purtroppo nella cella non arriva quello che mi aspetto:
se nel textbox c'è 21/10/15, nella cella appare 21/10/2015 (sembra OK)
se nel textbox c'è 10/7/15, nella cella appare 07/10/2015 (invertito)
Ovviamente il mio sistema è settato con data europea, non US, per cui il problema dovrebbe essere nel form. Non sono riuscito a forzare il formato corretto, nonostante vari tentativi: anche il format non funziona:
.cells(riga, colonna) = format (me.textbox, "dd/mm/yyyy").
Ho letto che dovrebbe essere possibile impostare l'input della textbox, ma non trovo la proprietà relativa, così come non trovo MS mask, citato in rete, e datetimepicker, in teoria da sostituire a txtbox. Qualcuno può indirizzarmi alla soluzione e/o a capirci qualcosa di più? Grazie.
PS: anche il fatto che comunque excel interpreti 15 come 2015 e non come 1915 mi lascia perplesso: è solo fortuna e devo prevedere di forzarlo in qualche modo per evitare sorprese?
di Vecchio Frac data: 01/04/2013 09:37:31
Quello delle date nei database (anche in Excel, ma più in Access) è da sempre uno dei maggiori problemi (stavo per scrivere un calvario, il periodo è quello giusto ^_^).
Nei miei progetti anch'io controllo con IsDate (affidabile non so quanto) ma poi formatto la data in testo e la immetto nel db sottoforma di stringa aaaammgg (con Format (my_textbox, "yyyymmdd"), l'indicazione dei parametri è in inglese).
Questo taglia radicalmente alla radice qualunque problema di interpretazione delle date.
Naturalmente al recupero del dato va fatta l'operazione di trasformazione nella data corretta:
s = cella_con_data
my_date = Right (s, 2) & "/" & Mid(s, 5, 2) & "/" & Left(s, 4)
Il controllo DTPicker che tu citi, corrispondente a "Microsoft Date and Time Picker Control 6.0": qualche volta l'ho usato anch'io, funziona bene, è anche immediato e aiuta molto l'utente (è in MSCOMCT2.OCX? su questo sistema non ce l'ho, dovrei scaricarlo, si trova facilmente).
Sull'interpretazione dell'anno, questa è una scelta dei progettisti di Excel che mi sembra fino al 29 assumono l'anno corrente come default :) Io ti consiglio di forzare sempre il dato corretto per evitare sorprese.
di roberto21 data: 01/04/2013 11:01:00
Una cosa strana: ho provato ad usare con scarse aspettative una funzione che non conoscevo, descritta male in qualche sito, Cdate. Mi sembra troppo facile, ma se ora scrivo
.cells (riga,colonna) = cdate (me.textboxdata.value)
mi mette tutto al posto giusto...secodo me, è troppo facile, ci deve essere un inghippo da qualche parte.
forzare formato data
di roberto21 (utente non iscritto) data: 01/04/2013 11:51:12
Ho un paio di textbox nelle user form in cui l'utente dovrebbe scrivere delle date. Per semplificare il codice (per ora) mi limito a verificare se abbia inserito davvero una data, con isdate, per cui l'utente può scrivere 21/10/13 o 21/10/2013 senza problemi; se sbaglia, visualizzo un msgbox e lascio lì il cursore, invitandolo a riprovare.
La data immessa viene trasferita in una cella del database, la cui colonna relativa è stata preventivamente formattata come data, gg/mm/aaaa. Purtroppo nella cella non arriva quello che mi aspetto:
se nel textbox c'è 21/10/15, nella cella appare 21/10/2015 (sembra OK)
se nel textbox c'è 10/7/15, nella cella appare 07/10/2015 (invertito)
Ovviamente il mio sistema è settato con data europea, non US, per cui il problema dovrebbe essere nel form. Non sono riuscito a forzare il formato corretto, nonostante vari tentativi: anche il format non funziona:
.cells(riga, colonna) = format (me.textbox, "dd/mm/yyyy").
Ho letto che dovrebbe essere possibile impostare l'input della textbox, ma non trovo la proprietà relativa, così come non trovo MS mask, citato in rete, e datetimepicker, in teoria da sostituire a txtbox. Qualcuno può indirizzarmi alla soluzione e/o a capirci qualcosa di più? Grazie.
PS: anche il fatto che comunque excel interpreti 15 come 2015 e non come 1915 mi lascia perplesso: è solo fortuna e devo prevedere di forzarlo in qualche modo per evitare sorprese?
di Vecchio Frac data: 01/04/2013 12:08:50
CDate() è una delle funzioni di conversione tra tipi di dato.
Funziona bene direi e anzi è quasi obbligatorio utilizzarla per essere sicuri che il tipo di dato passato ha proprio un formato data (e giocoforza se vuoi controllare che sia una data con IsDate).
Perchè pensi che ci sia qualche inghippo? ^_^
di roberto21 data: 01/04/2013 12:53:52
Ma scusa: sto combattendo da giorni con excel che ogni tanto mi inverte mese e giorno, ho provato di tutto senza esito, e ora trovo una funzione del cavolo che miracolosamente mi sistema tutto? E non dovrei pensare che è troppo facile? E che nessuno in internet ci abbia pensato prima di me? Dai, dov'è l'inghippo?
di roberto21 data: 01/04/2013 13:12:45
Scusa, approfitto della gentilezza. Il controllo DTpicker, anche volendolo provare, non me lo trovo nella lista dei controlli addizionali. Allora ho trovato MSCOMCT2.OCX e l'ho scaricato. Poi dovrei piazzarlo in c:windowssyswow64 per registrarlo, ma ho scoperto che c'è già. Allora perchè non vedo il controllo? devo registrarlo comunque?
di Vecchio Frac data: 01/04/2013 13:41:14
cit. " sto combattendo da giorni con excel che ogni tanto mi inverte mese e giorno, ho provato di tutto senza esito, e ora trovo una funzione del cavolo"
---> LOL, spesso succede proprio così ^_^
cit. " Poi dovrei piazzarlo in c:windowssyswow64"
---> No: in C:windowssystem32
Poi proprio devi registrarlo con
regsvr32 mscomctl2.ocx
di roberto21 data: 01/04/2013 14:07:06
OK, l'ho fatto. Certo che windows è proprio strano. Avevo seguito le istruzioni riportate in un post che riporto qui:
==========================================================================
Buongiorno a tutti,
tempo fa ho costruito un' applicazione Access. L' applicazione funziona. Oggi ho spostato il db da un computer ad un altro. Il problema è che sul nuovo computer (sul quale Vista è il sistema operatio e Office 2007 la suite per Access), quando apro il db, mi appare un messaggio che dice:
Riferimento mancante o non valido al file "mscomct2.ocx" versione 2.0 o nel progetto di Microsoft Office Access.
Ho provato a dare un' occhiata in rete per vedere come risolvere il problema ed ho proceduto come segue:
Ho scaricato il file mscomct2.ocx
L' ho copiato in in C:Windows|System32
Dal promt dei comandi mi sono spostato in C:Windows|System32
Ho inserito REGSVR32.exe mscomct2.OCX
A questo punto mi appare un ulteriore messaggio che dice:
Impossibile caricare il modulo "mscomct2.ocx".
Accertarsi che il file binario sia archiviato nel persorso specificato o eseguirne il debug per individuare eventuali problemi nel file binario o nei file DLL dipendenti.
Impossibile trovare il modulo specificato.
Come posso far funzionare il db sul nuovo computer?
Grazie a tutti.
Risposta
Franco Leuzzi ha risposto in data novembre 12, 2011
MVP Moderatore della community Miglior esperto della community
No.
Devi spostare il file nella cartella:
c:windowsSysWOW64
Se hai un sistema a 64 bit.
Per farti un esempio segui qui:
forums.techarena.in/operating-systems/1357149.htm
Ciao
Franco Leuzzi - Microsoft® MVP - Windows Expert-IT Pro - System Administration
================================================================================
per cui avendo io win7 a 64 bit, pensavo di dover procedere come scritto qui. Comunque, ora il controllo c'è, ma indovina che cosa appare come sua location in basso alla finestra dei controlli addizionali? Esatto:
c:windowswsyswow64MSCOMCT2.OCX
Chi ci capisce è bravo. Ora provo ad usarlo. Grazie
di Vecchio Frac data: 01/04/2013 14:45:49
Vedi che Seven è fatto meglio di Vista ^_^
In pratica mantiene system32 per compatibilità ma effettua il mirroring in automatico (roaming).
Vuoi Approfondire?