Newsgroup: it.comp.appl.access
Titolo: Da access2k ad excel2k

Sono a buon punto ma ...
Non capisco come mai a volte questa SUB pianta excel?
Secondo voi è OK?
grazie a tutti
'**********
Private Sub TrasferimentoDati(rstZinventa As DAO.Recordset)
Dim MyXLS As Object   ' Utilizzato per riferirsi ad XLS
Dim MyDoc As Object   ' Riferimento al documento XLS
Dim MySht As Integer  ' Contatore per i fogli XLS
Dim NFields As Integer ' Contiene il numero di campi del RecordSet
Dim XLSRun As Boolean ' Flag per il rilascio finale.
Dim Ccl As Long       ' Variabile per cicli vari
On Error Resume Next                ' Forza il programma in caso di errore
NFields = rstZinventa.Fields.Count  'Imposta il numero di campi in RecordSet
'Crea un riferimento nel caso vi sia un'istanza XLS aperta, altrimenti
genera un errore
Set MyXLS = GetObject(, "Excel.Application")
'Gestisce il risultato della chiamata precedente
If Err.Number = 429 Then
    Set MyXLS = CreateObject("Excel.Application") ' Riferimento non trovato,
lo creo
End If
Err.Clear                  ' Pulizia dell'errore
On Error GoTo Err_TrasferimentoDati
XLSRun = xlsUty.DetectXLS()     'Controlla se XLS è in esecuzione
Set MyDoc = MyXLS.Workbooks.Add ' Aggiunge un nuovo file
MyXLS.Visible = True            ' Visualizza il programma
MySht = 1                       ' Il foglio da utilizzare è il numero 1
Ccl = 1                         ' La prima riga de foglio
rstZinventa.MoveFirst           ' Si posiziona all'inizio del RecordSet
Do Until rstZinventa.EOF = True ' Scorre i records fino alla fine
    If Ccl >= 65000 Then        ' Se si è vicini alla fine foglio
        MySht = MySht + 1       ' Il foglio da utilizzare viene incrementato
        Ccl = 1                 ' Ritorno alla riga 1
    End If
    For x = 0 To NFields - 1      'Scorre i campi nella riga RecordSet
        MyDoc.Worksheets(MySht).Cells(Ccl, x + 1) =
rstZinventa.Fields(x).Value 'assegna i valori del record
    Next x
    rstZinventa.MoveNext        'si sposta sul record successivo
    Ccl = Ccl + 1               'e sulla riga XLS successiva
Loop
rstZinventa.Close                 'chiude il recordset
If xlsUty.DetectXLS() = True Then 'se XLS è aperto
    'salva e chiude il documento prima di chiudere l'applicazione
    MyDoc.Close SaveChanges:=True, Filename:="c:\windows\temp\zinventa.xls"
    MyXLS.Application.Quit
End If
Set MyDoc = Nothing             'annulla il puntatore al documento
Set MyXLS = Nothing             'annulla il puntatore all'XLS
Exit_TrasferimentoDati:
Exit Sub
Err_TrasferimentoDati:
    MsgBox Error, vbOKOnly + vbExclamation, "ERRORE " & Str(Err.Number)
    Resume Exit_TrasferimentoDati
End Sub
--
Claudio Tregambe

Secondo voi è OK?
Visto che sono una cinquantina di righe non sarebbe male sapere dove si
pianta...:-)
Saluti.
Luciano
(DOC)


Giustissimo!
Nella disperazione non ho piů considerato che Voi non siete qui ;-)
Sorry!
Il mio problema č che il codice non si pianta, o almeno cosě sembra.
Credo invece che si "annodi" durante l'apertura e chiusura del file xls
e di excel stesso mediante le chiamate da access.
Mi capita di trovare excel bloccato, che blocca access, che blocca
guardafuori, che blocca.... Insomma, dopo ore di F8 non sono
ancora riuscito a capire cosa c'č che non funziona.
Per conoscenza Vi informo che utilizzando le applicazioni direttamente
tutto funziona alla perfezione.
Grazie infinite per eventuali suggerimenti che in questo momento mi
farebbero veramente comodo.
--
Claudio Tregambe


Aggiornamento:
Sembra che si crei un errore di automazione ma non capisco come.
Vi ringrazio per l'aiuto ma dopo tutti questi tentativi (falliti) ho deciso
di cambiare strada
e cercherò di risolvere in altro modo.
ciao e grazie a tutti.
--
Claudio Tregambe


In che senso ti pianta Excel ? nel senso che si blocca tutto ?.. ma lo fa'
sempre o solo a volte ?
Hai provato a importare che ne so' 10000 righe per foglio di lavoro , in
modo da diminuire il carico e vedere dove ti si pianta ?
magari e' solo una questione di processo estremamente pesante. :))
Ciao
--
(^o^))~    Lorenzo   (^o^))~
"Preimaginare e' lo imaginare le cose che saranno..."
"Postimaginare e' imaginare le cose passate ..."
(Leonardo Da Vinci)


Credo tu abbia ragione relativamente al processo pesante.
Ho provato tutto il giorno ieri ed il trasferimento si pianta sempre alla
riga 4056 (dieci righe più o meno) di excel.
Il fatto è che si pianta proprio bene ed anche quando, dopo aver
premuto ctrl+alt+canc e killato excel chiudo access (che nel frattempo
mi ritorna "errore di automatismo"), access rimane aperto come istanza
e sono costretto a fare nuovamente ctrl+alt+canc e killare anche
quello per sbloccare il tutto. Infatti una volta chiuso access le altre
applicazioni si sbloccano.
Se qualcuno ha dei suggerimenti ... io nel frattempo sbatto tutto in un file
di testo e rimando l'importazione ad una macro in excel.
Grazie per tutta la pazienza che dimostrate nel sopportarmi.
ciao
--
Claudio Tregambe


Io faccio cosě:
'------------
MyDoc.Close
MyXLS.Quit
Set MyDoc = Nothing             'annulla il puntatore al documento
Set MyXLS = Nothing             'annulla il puntatore all'XLS
'------------
Potrebbe non significare nulla ma non si sa mai...
Ciao.
P.S. Ah! Le stesse righe le inserisco anche nella gestione degli errori dopo
il Msgbox.
Ari-Ciao.

 ha scritto nel messaggio
news:9ah314$q6o$1...@fe2.cs.interbusiness.it...

ha ragione Sergio, potrestoi mettere i close du errore
cosi' ti chiude l'istanza e non ti blocca access :))
Ciao