Newsgroup: it.comp.appl.access
Titolo: Problema con Docmd.transferspreadsheet

Ciao a tutti
Utilizzo la funzione in oggetto per trasferire dati da un foglio Excel 
2007 a una tabella di un database Access 2007.
Per semplicità di esposizione ipotizziamo che il foglio XL abbia una 
sola colonna, la quale può contenere sia dati numerici (cioè formattati 
da XL come numeri) che dati alfanumerici. Questi dati devono essere 
trasferiti in un campo text della tabella Access.
Effettuato da VBA il comando Docmd.transferspreadsheet, riscontro un 
comportamento anomalo.
Se il foglio XL contiene nelle prime 8 righe dei valori numerici e in 
una delle righe successive un valore alfanumerico, il valore 
alfanumerico non viene importato a causa del seguente errore:
"You cannot record your changes because a value you entered violates the 
settings defined for this table or list (for example, a value is less 
than the minimum or greater than the maximum).  Correct the error and 
try again."
la cosa curiosa è che questo accade solo se i primi 8 valori del foglio 
XL sono numerici. Se ci sono 7 (o meno) valori numerici seguiti da uno 
alfanumerico, l'importazione avviene senza problemi.
Per spiegarmi meglio, il foglio coi valori:
1
1
1
1
1
1
1
1
A
non importa in Access l'ultima riga segnalando l'errore sopra descritto, 
mentre il foglio con i valori:
1
1
1
1
1
1
1
A
1
importa tutte le righe correttamente.
Purtroppo non posso agire sul foglio XL di origine (è generato in 
automatico da un gestionale). Non ho trovato il modo di forzare Access a 
importare sempre questi dati come Text.

Purtroppo è accaduto anche a me facendomi perdere un sacco di tempo...
Succede che l'iterpretazione del FieldType viene fatta sul PRIMO
dato... pertanto se trova 1 viene interpretato da JET come numero e
questo perchè 1 è diverso da '1 ....
Formatta la colonna come TESTO e non come GENERICO, e, usa l'apicetto
iniziale...
@Alex

iniziale...
Purtroppo non ho possibilità di accedere ai fogli di Excel prima che
vengano importati, quindi non posso formattare le colonne nè
aggiungere apici. Posso agire solo sul database Access.

punto il FieldType č settato a numerico e basta.
A quanto pare non č cosě strano. Il file Excel viene scansionato da
Jet, e il fieldtype viene determinato in base a un settaggio nel
registro di windows:
http://www.dicks-blog.com/archives/2004/06/03/external-data-mixed-data-types/
Sulla mia macchina TypeGuessRows effettivamente č settato a 8, quindi
se le prime otto righe sono numeri, Jet stabilisce che quel dato č
numerico.
Purtroppo Jet agisce su XL e non su Access, quindi credo di dovermi
tenere il problema... (il database č condiviso e non posso modificare
il registry su tutte le macchine)

 il registry su tutte le macchine
Ciao!
Nel mio caso (non sapevo neanche chi/dove potesse utilizzare il mio
sw), dopo essermi picchiato non poco con IMEX e compagnia bella, ho
optato per questa soluzione.
1) l'utente seleziona il file XLS da importare
2) il sw apre il file, nella seconda riga del foglio da importare
inserisce  una "A" in ogni cella sino all'ultima colonna e salva il
file in cartella temporanea
3) importo il mio file dalla cartella temporanea in una tabella di
transito
4) elimino il primo record (quello con le "A") dalla tabella di
transito
5) elimino il mio file dalla cartella temporanea
6) trasferisco i dati dalla tabella di transito alla/e tabella/e di
destinazione
HTH
Popi

 Popi
Sě, mi sembra la soluzione piů "elegante" e sensata.
Alla fine anch'io ho "risolto" con l'Excel Automation. Nel mio caso il 
campo misto č uno solo, quindi ho letto il valore dalla prima cella del 
foglio XL, gli ho aggiunto un apice davanti e ho sovrascritto il file 
originale.
Comunque il comportamento di Jet in questa occasione mi sembra 
quantomeno anomalo. E anche agendo sulle chievi di registro citate nel 
post precedente non si ottengono effetti tangibili.
grazie per la condivisione! :D