Newsgroup: it.comp.lang.visual-basic
Titolo: Altro problema con excel...

ho un problema con excel:
io riesco ad aprire perfettamente excel con la sua cartella e i suoi
fogli la prima volta ma se tento di rifare la stessa cosa la seconda
volta si apre excel in contorno e vedo tutto tranne il foglio, cioč č
come se ci fosse un buco in mezzo al monitor e mancasse il foglio mentre
i bottoni in alto e la barra in basso di excel ci sono.
il codice per aprire excel č il seguente:
'inizio codice --------------
Dim appExcel As New Excel.Application
Dim cartExcel As Excel.Workbook
Dim foglioExcel As Excel.Worksheet
Dim foglio As Object
    Set cartExcel = Excel.Workbooks.Add
    Set foglioExcel = Excel.Worksheets.Add
    foglioExcel.Activate
 
    appExcel.Application.DisplayAlerts = False
    For Each foglio In cartExcel.Worksheets
        If foglio.Index = 1 Then
            foglio.Name = "(Nuovo)"
        Else
            foglio.Delete
        End If
    Next foglio
 
    appExcel.Application.DisplayAlerts = True
 
    appExcel.Visible = True
'fine codice --------------
Tutto il codice č all'interno di un bottone e ho richaimato il
riferimento ad excel come si deve.
Il problema persiste se dopo aver chiuso la prima volta excel riclicco
sul pulsante per la seconda volta.
Vi sarei grato per eventuali correzioni e/o suggerimenti.
Grazie Mario.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

sei sicuro di non avere il mio stesso problema???
Credo che quando tenti la seconda volta di aprire, tu abbia una sessione
excel già aperta nella memoria e qiundi non ti si apre il worksheet (me l'ha
fatto anche a me).... probabilmente, come me, non chiudi bene
l'applicazione...
Guarda dopo la prima volta, se nel sistema c'è una sessione Excel, vedrai
che c'è...
--
(¯`·.¸ ALEX MANGLER ¸.·´¯)

Chido scusa a tutto il newsgroup per il messaggio ripetuto...
nella fratta del lavoro non ho letto almeno tutta la pagina di mailgate.
Chiedo di nuovo scusa. Scriverň sui ceci :)
Grazie a tutti.
Mario


Probabilmente il problema è nel DIM dell'oggetto Application, che è
all'interno del button anzichè pubblico dell'applicazione.
Quando si esce dalla sub del bottone, Excel rimane aperto, ma l'oggetto
application non viene distrutto perchè è ancora 'vivo'.
L'ideale è chiudere Application da codice, oppure definire Application in un
modulo con Public, e ogni volta che si deve aprire un nuovo foglio
verificare se application è valido, e quindi basta aprire un foglio, o se
occorre fare il createobject di un Excel.Application.
Alberto

La createobject dell'application la faccio, la funzione di importazione ce
l'ho cmq anche io nel click di un bottone...
cosa mi dici di fare? devo dichiarare l'oggetto come pubblico nella form o
magari addirittura in un modulo?


 sul pulsante per la seconda volta.
Non vedo nessuna istruzione:
    Set <nomeoggetto> = Nothing
Come mai?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

     Set <nomeoggetto> = Nothing
E questo è quello che dico anche io.
Ma se è dentro ad un Button_Click, non può fare il nothing, altrimenti perde
il controllo dell'applicazione.
Ciao
Alberto

 magari addirittura in un modulo?
Dal mio punto di vista è molto consigliabile.
Prima di chiudere il tuo applicativo, invochi AppExcel.Quit, poi lo setti a
nothing
Se invece vuoi riaprire un foglio nuovo, ma hai già istanziato una volta
AppExcel, basta fare l'Add del foglio, utilizzando lo stesso AppExcel già
esistente.
Ciao
Alberto

Spetta spetta!
Excel mi si deve chiudere, quando finisco l'importazione dei dati... quindi
io devo: aprire excel, aprire il file, importare i dati, chiudere il file,
chiudere excel. se poi l'utente vuole reimportare un'altra cifra il
programma deve rifare tutto... apri apri, chiudi chiudi... beh! ora come
ora, non me lo fa! cioè! excel sembra chiuso, ma nei processi del sistema
appare una sessione EXCEL...


 appare una sessione EXCEL...
Ripeto:
Se fai il Quit e il Nothing di solito sparisce.
Ciao
Alberto

e per il mio post precedente delle 12.12, sai aiutarmi??


Siiiii
sono riuscito a fare tutto.
(scusate l'entusiasmo)
Vi posto il codice che è ancora in fase di sviluppo ma che fa tutto
quello che DEVE fare:
'inizio del modulo
Option Explicit
Private appExcel As New Excel.Application
Private cartExcel As Excel.Workbook
Private foglioExcel As Excel.Worksheet
Public Sub apriConnExcel()
    'Apro l'applicazione
    Set appExcel = New Excel.Application
End Sub
Public Sub apriCartExcel()
    'Apro la cartella
    Set cartExcel = appExcel.Workbooks.Add
End Sub
Public Sub apriFoglioExcel()
Dim foglio As Object
 
    Set foglioExcel = appExcel.Worksheets.Add
 
    appExcel.Application.DisplayAlerts = False
    For Each foglio In cartExcel.Worksheets
        If foglio.Index = 1 Then
            foglio.Name = "(Nuovo)"
        Else
            foglio.Delete
        End If
    Next foglio
    appExcel.Application.DisplayAlerts = True
 
    appExcel.Visible = True
End Sub
Public Sub ChiudiExcel()
    Set cartExcel = Nothing
    appExcel.Quit
    Set appExcel = Nothing
End Sub
'fine del modulo
Il codice è stato inserito in un modulo.
Nel form principale mettete queste tre righe in un bottone
    Call apriConnExcel
    Call apriCartExcel
    Call apriFoglioExcel
e poi questa riga nella UnLoad della form
    Call ChiudiExcel
Il codice, ripeto, è ancora in fase di sviluppo e buttato giù in un paio
di minuti.
RINGRAZIO DI CUORE TUTTI COLORO CHE SONO INTERVENUTI NEI MESSAGGI perchè
è grazie a loro che sono riuscito a capire molto meglio Excel.
Rimango in attesa di tutti i suggerimenti/rimproveri da fare.
Ciao, Mario.


 perde il controllo dell'applicazione.
Da come e' scritto il codice direi che parlare di controllo di alcunche' e'
quantomeno azzardato.
E' bene definire chiaramente gli scopi che si vogliono ottenere. Prima si
definisce, poi si parla di codice.


 quello che DEVE fare:
...
Bravo Mario. Così si fa.

 E chi imposta le impostazioni? Il Grande Programmatore?
Peggio. L'utente. E siccome se installi su 100PC puoi avere 100 utenti
diversi, ognuno con le sue pare, meglio premunirsi un attimo. Ho visto
persone con impostato 16 fogli di Excel nei documenti nuovi.
Ciao
Alberto

 persone con impostato 16 fogli di Excel nei documenti nuovi.
--



Mi intrometto =)
Troppo spesso capita che per imprevedibilita' del S.O., del
comportamento dell'utente e di altri fattori contingenti i sw che si
interfacciano con applicazioni (word/excel/access/ecc.) vengano
"interrotti" non correttamente.
Cio' porterebbe ad un eventuale "non ripristino" della situazione
originale, con classica telefonata: "non mi funziona piu' excel!" (leggi
non mi si aprono piu' le 16 cartelle che tanto mi facevano comodo e che
mi aveva impostato il mio "tecnico di rete" e non so come reimpostarle).
Happy Coding =)
Lokar

 quello che DEVE fare:
[...]


> "Lokar" [...]:

Capisco e posso anche concordare: il tuo ragionamento e' saggio e sensato ma
non e' possibile una regola generale. Dipende dai contesti in cui si opera.
Nel caso particolare,poi, piu' che mettere l'accento sul problema da te
sollevato volevo evidenziare un atteggiamento, diciamo cosi', perverso, una
sorta di pigrizia masochistica che ci porta a fare certi doppi e tripli
salti mortali piuttosto che trovare una soluzione piu' efficace. Studiando?
Sperimentando? Tempo permettendo, ovviamente. Ma il tempo per scrivere
cattivo codice quello lo troviamo sempre, no? ;-)
