Newsgroup: it.comp.appl.access
Titolo: Applicazione terminata, ma che rimane attiva nel Task Manager

Buongiorno.
Ho un'applicazione in Access97 che importa via VBA il contenuto di un foglio
di Excel che contiene un indirizzario (sono 7 colonne) di clienti.
Succede che l'applicazione esegue correttamente l'importazione, ma si
verifica una situazione strana e cioè resta attiva l'applicazione Excel solo
se il mio foglio contiene più di 60 righe. In caso contrario l'applicazione
Excel viene disattivata.
In sostanza nel primo caso in Task Manager risulta ancora attivo Excel.
Purtroppo succede anche che se non chiudo Excel, si verificano blocchi per
qualsiasi programma che eseguo sul pc.
Quello che segue è la porzione di codice che chiude Excel
    ...
    ...
    Set wkSh = Nothing
    wkBk.Close
    Set wkBk = Nothing
    oApp.Application.Quit
    Set oApp = Nothing
    MsgBox "Importazione terminata." & vbCr & "Sono state importate " &
Trim(str(iRigheImp)) & " righe.", vbInformation,   "Importazione Clienti"
    DoCmd.Close
Sicuramente i set vengono sempre eseguiti, il messaggio viene sempre emesso
e ovviamente l'ìapplicazione si chiude.
Qualcuno può darmi qualche informazione che mi possa aiutare a risolvere il
problema?
Grazie
Ciao
Eugenio

Eugenio ha scritto:

Le righe di chiusura sembrano esatte, ma sei sicuro che vengano
effettivamente eseguite? Non è che una qualche gestione degli errori le
bypassa? Mettici dei punti di interruzione, dei debug.print o degli msgbox
per verificare che le istruzioni vengano eseguite.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Ho seguito l'elaborazione passo passo la procedura ponendo un punto
d'interruzione poco prima delle righe di chiusura e le istruzioni vengono
eseguite tutte. Del resto al termine dell'elaborazione viene emessa una
msgbox, come puoi vedere, e quindi non c'è possibilità che esca per un
errore.
Ho provato a fare anche una prova assurda ripetendo il blocco della chiusura
e, ovviamente, il risultato è stato che il primo gruppo è stato eseguito,
mentre il secondo terminava in errore a causa della mancanza
dell'applicazione attiva.
Grazie
Ciao
Eugenio

 Eugenio
Quindi il codice che termina excel funziona. Non è che per qualche motivo
apre due istanze di excel, e poi ne chiude una sola? Verifica prima
durante e dopo l'esecuzione del codice quanti excel sono in esecuzione.
Ciao.


 ha scritto nel messaggio
news:c8i4fk$c9v$1...@news.newsland.it...

Seguendo passo passo mi pare tutto regolare.
Comunque di seguito espondo il codice della sub che mi crea il problema.
Prima di questa ci sono altre due sub che utilizzano Excel: la prima serve
per selezionare il foglio e la seconda estrare l'elenco delle colonne che
compongono il foglio.
Private Sub Importazione()
Dim oApp As Excel.Application
Dim wkBk As Excel.Workbook
Dim wkSh As Excel.Worksheet
Dim dbST As DATABASE
Dim rsST As Recordset
Dim rsCP As Recordset
Dim rsColl As New Collection
Dim i As Integer
Dim iRigheImp As Integer
Dim intRowIndex As Integer
Dim iR As Integer
Dim intColIndex As Integer
Dim iC As Integer
Dim blInsert As Boolean
Dim blErrore As Boolean
On Error GoTo Err_Importazione
    DoCmd.Hourglass True
    iRigheImp = 0
    Set oApp = CreateObject("Excel.Application")
    Set wkBk = oApp.Workbooks.Open(Me!Percorso)
    i = Me!Foglio.Column(1)
    Set wkSh = wkBk.Worksheets(i)
    Set dbST = CurrentDb
    Set rsCP = dbST.OpenRecordset("Clienti", dbOpenDynaset, dbSeeChanges)
    iR = 0
    'Lettura righe del foglio a partire dalla riga 2, perchè la riga 1
contiene le intestazioni
    For intRowIndex = 2 To 9999
        If wkSh.Cells(intRowIndex, 1) > "" Then
            blInsert = False
            iC = 0
            'Lettura colonne del foglio
            For intColIndex = 1 To 250
                If Trim(wkSh.Cells(1, intColIndex)) > "" Then
                    Set rsST = dbST.OpenRecordset("Select NomeTabella,
NomeCampo, TipoCampo, LunghezzaCampo, ColonnaFoglio " & _
                                                  "From StrutturaTabelle " &
_
                                                  "Where NomeTabella =
'UniClientiPotenziali' and ColonnaFoglio = '" &
Trim(SostituisciStringa(wkSh.Cells(1, intColIndex), "'", " ")) & "'")
                    If rsST.EOF = False Then
                        If blInsert = False Then
                            rsCP.AddNew
                            rsCP!RagioneSociale = ""
                            rsCP!Indirizzo = ""
                            rsCP!Citta = ""
                            rsCP!Cap = ""
                            rsCP!Provincia = ""
                            rsCP!Zona = ""
                            rsCP!nazione = ""
                            rsCP!NrTelefono = ""
                            rsCP!NrFax = ""
                            rsCP!Email = ""
                            blInsert = True
                        End If
                        If wkSh.Cells(intRowIndex, intColIndex) > "" Then
                            Select Case rsST!NomeCampo
                                Case "RagioneSociale": rsCP!RagioneSociale =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 100)
                                Case "Indirizzo":      rsCP!Indirizzo =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 100)
                                Case "Cap":            rsCP!Cap =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 10)
                                Case "Citta":          rsCP!Citta =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 50)
                                Case "Provincia":      rsCP!Provincia =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 2)
                                Case "Zona":           rsCP!Zona =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 3)
                                Case "Nazione":        rsCP!nazione =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 50)
                                Case "NrTelefono":     rsCP!NrTelefono =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 30)
                                Case "NrFax":          rsCP!NrFax =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 30)
                                Case "Email":          rsCP!Email =
Mid(Trim(wkSh.Cells(intRowIndex, intColIndex)), 1, 100)
                            End Select
                        Else
                            iC = iC + 1
                            If iC = 3 Then Exit For
                        End If
                    End If
                    rsST.Close
                    Set rsST = Nothing
                End If
            Next intColIndex
            If blInsert = True Then
                rsCP!ItaliaEstero = "I"
                'Prima di aggiornare viene verificato se il cliente esiste
già nella tabella
                blErrore = False
                Call ControllaEsistenzaCliente(rsCP!RagioneSociale,
rsCP!Indirizzo, rsCP!Citta, rsCP!Cap, rsCP!Provincia, rsCP!Zona,
rsCP!nazione, rsCP!NrTelefono, rsCP!NrFax, rsCP!Email, blErrore)
                If blErrore = False Then
                    rsCP.Update
                    iRigheImp = iRigheImp + 1
                    blInsert = False
                Else
                    'rsCP.Delete
                End If
            End If
        Else
            iR = iR + 1
            If iR = 3 Then Exit For
        End If
    Next intRowIndex
    rsCP.Close
    Set rsCP = Nothing
Exit_Importazione:
    Set wkSh = Nothing
    wkBk.Close
    Set wkBk = Nothing
    oApp.Application.Quit
    Set oApp = Nothing
    MsgBox "Importazione terminata." & vbCr & "Sono state importate " &
Trim(str(iRigheImp)) & " righe.", vbInformation, "Importazione Clienti"
    Forms!Sk_AnagCliPotenziali.Requery
    Me.SetFocus
    DoCmd.Hourglass False
    DoCmd.Close
    Exit Sub
Err_Importazione:
    MsgBox ERR.number & " - " & ERR.description
    Resume Exit_Importazione
End Sub
Ciao
Grazie
Eugenio

"Eugenio" <Ci...@Eugenio.it> ha scritto nel messaggio
news:c8i5k6$u31$1...@lacerta.tiscalinet.it...

Porta pazienza, ma invece di chiamare una cella per volta di Excel
dagli il Nome alla cella= al nome Campo del Recordset.
Ciclando il Recordset Cicli contemporaneamente le 2 cose.
Una cosa del genere:
For Each fld In rs.Fields             ' Ciclo sull'insieme Fields
del recordset
      For Each nme In xlsActiveWkb.Names  ' Ciclo sull'insieme Names
della cartella attiva
        If fld.Name = nme.Name Then       ' Se il nome campo è uguale al
nome di Name
           With xlsActiveWkb.Worksheets(1).Range(nme.Name)
            '.Select                      'Seleziono la cella
            .Value = fld.Value            'Ci scrivo il Value del field
del recordset
          End With
        End If
      Next nme
    Next fld
Per il problema che denunci , non è che hai il Doc in MERGE con
il Database...???
Ciao.
@Alex.


Pazienza ne ho molta, le ore gratis non si contano. Il problema è che spesso
oltre al programma bisogna considerare i bachi che Microsoft non corregge.
Devi comprare le correzioni, alias cambiare versione.
Il problema si è risolto sostituendo a
Dim oApp As Excel.Application
Dim wkBk As Excel.Workbook
Dim wkSh As Excel.Worksheet
le seguenti Dim
Dim oApp As Object
Dim wkBk As Object
Dim wkSh As Object
Meraviglie delle meraviglie, no?
Una curiosità, se mi vuoi rispondere, che non riguarda il mio problema, da
poco frequento questo NG, ma le persone com te, Sergio Mazza, Roberto da
casa, Antonio Biso, Pablito qualcosa, Namor e mi scuso con gli altri se non
ricordo il loro nome o nick, siete professionisti Access a tempo pieno, nel
senso che svolgete una libera professione? Sieti anche i curatori del Sito
Comune?
Grazie Alessandro
Ciao
Eugenio

 Eugenio
Ovviamente ti rispondo per quanto mi compete:
1)Solo Hobby per me la mia Professione non è minimamente attinente.
2)Personalmente aderisco alla causa del SC inviando materiale
i curatori del SC sono la TRIADE che trovi elencata.
Ciao.
@Alex.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:ed0422092e9377dd96...@mygate.mailgate.org...

Solo Hobby? Complimenti!


 Eugenio
Io da parecchio non svolgo più la libera professione e access l'ho iniziato
ad utilizzare dalla versione 2.
Ciao.
-- 
Sergio MAZZA