Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con Excel

vb6 sp3
Da vb apro un file excel faccio le mie scritture e chiudo, chiudo 
manualmente da Task Manager l'istanza di excel che stranamente mi risulta 
ancora li , poi rilancio la procedura per ripetere la stessa operazione su 
altro file ma incappo nell'errore di run-time 462 "lL computer server remoto 
non  esiste o non è disponibile" sulla riga Copy Before.
Mi aiutate a acapire ed evitare questo errore? Grazie per sogni uggerimento
Questo è il codice usato:
Sub CmdExcel()
Dim XL As New Excel.Application
XL.Workbooks.Open NomeFile
With XL.Workbooks(1)
    .Sheets("Foglio1").Select
    .Sheets("Foglio1").Copy Before:=Sheets(1)
    .Sheets("Foglio1 (2)").Select
    .Sheets("Foglio1 (2)").Name = StrNomeTest
 End With
..altre operazioni su celle..
XL.ActiveWorkbook.SaveAs NuovoFile
XL.Workbooks(1).Close
XL.Quit
Set XL = Nothing
End Sub

 ha scritto nel messaggio 
news:ila9qe$pnm$1...@news.eternal-september.org...
Aggiornamento
Se non faccio l'opeerazione di copia foglio, l'oggetto excel si crea e si 
distrugge cottettamente ad ogni richiamo della sub.
Se copio il foglio, l'oggetto excel rimane sempre in meomiria, non si 
chiude.
Anche a chiuderlo a mano da l task manager, qualcosa rimane sempre in 
memoria a casusare l'errore.
greg 

"greg"  ha scritto nel messaggio 
news:ilajdg$8td$1...@news.eternal-september.org...

Aggiornamento

Io uso questo, ovviamente da adattare e NomeFile
e NuovoNomeFile vanno sostituiti con path e nomi fogli
appropriati:
Private Sub Command1_Click()
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
On Error GoTo RigaErrore
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open(NomeFile)
    Set objWorksheet = objWorkbook.Worksheets("Foglio1")
    'se voglio visualizzare
    'objExcel.Visible = True
    With objWorksheet
        .Cells(1, 1).Value = "Pippo"
        .Cells(1, 2).Value = "Pluto"
    End With
    'codice di salvataggio
    'objWorkbook.SaveAs NuovoNomeFile
RigaChiusura:
    objExcel.Quit
    Set objWorksheet = Nothing
    Set objWorkbook = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
 

 appropriati:
Ciao Mauro, grazie per la risposta.
Il tuo codice va bene, l'avero gia provato e adeguato alle mie esigenze in 
passato, ma, come divevo, se provo a copiare Foglio1 e metterlo prima di 
Foglio1 e poi rinominarlo (in fondo è un codice copiato dalla macro di excel 
e aggiunto alla sub) ecco in questo modo Excel rimane aperto e non si 
chiude; non da neanche errore!
Questo è il codice aggiunto alla tua sub:
With objWorkbook
    .Sheets("Foglio1").Select
    .Sheets("Foglio1").Copy Before:=Sheets(1)
    .Sheets("Foglio1 (2)").Select
    .Sheets("Foglio1 (2)").Name = "NewFoglio"
 End With
Questa è tutta la sub con aggiunta la mia With, se provo ad eseguirla va 
tutto bene, ma excel, come si vede dal task manager rimane aperto fino a 
quando non esco dalla modalità esecuzione di vb. Qualche idea?
Private Sub Command1_Click()
  Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
    nomefile = App.Path & "\temp.xls"
On Error GoTo RigaErrore
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open(nomefile)
    Set objWorksheet = objWorkbook.Worksheets("Foglio1")
    'se voglio visualizzare
    'objExcel.Visible = True
    With objWorksheet
        .Cells(1, 1).Value = "Pippo"
        .Cells(1, 2).Value = "Pluto"
    End With
With objWorkbook
    .Sheets("Foglio1").Select
    .Sheets("Foglio1").Copy Before:=Sheets(1)
    .Sheets("Foglio1 (2)").Select
    .Sheets("Foglio1 (2)").Name = "NewFoglio"
 End With
    'codice di salvataggio
   objWorkbook.SaveAs App.Path & "\NuovoNomeFile.xls"
RigaChiusura:
    objExcel.Quit
    Set objWorksheet = Nothing
    Set objWorkbook = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
-- 
Greg 

Ciao Mauro, grazie per la risposta.
Il tuo codice va bene, l'avero gia provato e adeguato alle mie esigenze in
passato, ma, come divevo, se provo a copiare Foglio1 e metterlo prima di
Foglio1 e poi rinominarlo (in fondo è un codice copiato dalla macro di excel
e aggiunto alla sub) ecco in questo modo Excel rimane aperto e non si
chiude; non da neanche errore!
Questo è il codice aggiunto alla tua sub:
With objWorkbook
    .Sheets("Foglio1").Select
    .Sheets("Foglio1").Copy Before:=Sheets(1)
    .Sheets("Foglio1 (2)").Select
    .Sheets("Foglio1 (2)").Name = "NewFoglio"
End With
***********************************
Con questo codice non vedo nessuna sessione di
Excel aperta alla fine della routine:
Private Sub Command1_Click()
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
On Error GoTo RigaErrore
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\Prove\tuoFile.xls")
    Set objWorksheet = objWorkbook.WorkSheets("Foglio2")
    objExcel.Visible = True
    With objWorksheet
        .Copy Before:=objWorkbook.WorkSheets(1)
 
objExcel.Activesheet.Name
 = "NewFoglio"
    End With
RigaChiusura:
    objExcel.Quit
    Set objWorksheet = Nothing
    Set objWorkbook = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
La stessa cosa se utilizzo un codice simile al tuo:
Private Sub Command1_Click()
    Dim objExcel As Object
    Dim objWorkbook As Object
On Error GoTo RigaErrore
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\Prove\tuoFile.xls")
    objExcel.Visible = True
    With objWorkbook
        .Sheets(1).Copy Before:=.Sheets(1)
 
objExcel.Activesheet.Name
 = "NewFogliox"
    End With
RigaChiusura:
    objExcel.Quit
    Set objWorkbook = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
Puoi, per favore, provare?
Utilizzo ActiveSheet perchè quando fai una copia
del foglio nella cartella, la copia è il foglio attivo.
Non importa selezionare il foglio di cui devi fare la copia;
è sufficiente passare l'indice o il nome a
Sheet(n/Nome).Copy
Grazie per l'attenzione.



Ma grazie a te :)
Questa nuova versione funziona bene, finisce e chiude excel.
E la differenza sta in qusti due blocchi, secondo me equivalenti, ma si vede 
che non č cosě:
Questo va:
    With objWorkbook
        .Sheets("Foglio1").Copy Before:=.Sheets("Foglio1")
 
objExcel.ActiveSheet.Name
 = "NewFogliox"
    End With
Questo non va:
With objWorkbook
    .Sheets("Foglio1").Select
    .Sheets("Foglio1").Copy Before:=Sheets(1)
    .Sheets("Foglio1 (2)").Select
    .Sheets("Foglio1 (2)").Name = "NewFoglio"
 End With
Ho fatto una verifica, non č la selezione esplicita del titolo a dare 
fastidio, ma il diverso modo di refenziare il foglio.
Bisogna riferirsi al foglio in maniera esplicita, con objSheet, invece che 
objWorkbook.Sheets("Foglio1")
Ancora grazie, ciao :)
greg

 ha scritto nel messaggio
Un'ultima cosa Mauro,
alla fine di tutto devo cancellare il Foglio1 usato come matrice per gli 
altri fogli, ma il comando Delete mi fallisce e senza sollevare errore.
Lo uso cosi, ma ho provato anche in altri modi
 objWorkbook.Sheets("Foglio1").Delete
greg

"greg"  ha scritto nel messaggio 
news:ildi2q$js2$1...@news.eternal-september.org...


objWorkbook.Sheets("Foglio1").Delete
greg
***************************
Quale errore?
Se(se) ho capito, prova:
Private Sub Command1_Click()
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim sh As Object
On Error GoTo RigaErrore
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\Prove\tuoFile.xls")
    objExcel.Visible = True
    With objWorkbook
        Set sh = .sheets(1)
        .sheets(1).Copy Before:=.sheets(1)
 
objExcel.Activesheet.Name
 = "NewFoglio5"
        objExcel.displayalerts = 0
        sh.Delete
        objExcel.displayalerts = 1
    End With
RigaChiusura:
    objExcel.Quit
    Set sh = Nothing
    Set objWorkbook = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
Se non ho capito, per favore prova di
spiegare meglio. Grazie.


 spiegare meglio. Grazie.
No, on sei tu che non hai capito, ma io che spiego male, o exel che funaiona 
in modo diverso, in base al fatto se un oggetto è istanziato direttameto o 
derivato dal suo padre.
Il Deleto dentro il tuo coduce puro funziona, messo dentro dentro al mio 
ignola il Delete.
Lunedi proverò ancora sul codice orignale che ho in ufficio e non qui con 
me.
Ti saprò dire
-- 
Greg 

 Mauro Gamberini ha scritto:
Chiedo scusa per non posare mai lo sguardo su quello che scrivo prima di 
inviare.
Mi riprometto sempre di farlo, e poi...
-- 
Greg 

No, on sei tu che non hai capito, ma io che spiego male, o exel che funaiona
in modo diverso, in base al fatto se un oggetto è istanziato direttameto o
derivato dal suo padre.
****************************************
Non ho capito cosa intendi per *derivato da suo padre*.
Questo codice *assomiglia di più* al tuo:
Private Sub Command1_Click()
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim sh As Object
On Error GoTo RigaErrore
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\Prove\tuoFile.xls")
    objExcel.Visible = True
    With objWorkbook
        With objWorkbook
            .sheets("Foglio1").Copy Before:=.sheets(1)
            .sheets("Foglio1 (2)").Name = "NewFoglio"
            objExcel.displayalerts = False
                .sheets("Foglio1").Delete
            objExcel.displayalerts = True
         End With
    End With
    objWorkbook.saveas "C:\Prove\tuoFile1.xls"
RigaChiusura:
    objExcel.Quit
    Set sh = Nothing
    Set objWorkbook = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
Ho aggiunto un foglio identico al Foglio1,
l'ho rinominato, ho eliminato il Foglio1,
ho salvato il file con altro nome.
Non ho nessun riferimento ad Excel nel task manager.
Fai sapere, grazie.


 Fai sapere, grazie.
Confermo, il riferimento ad excel non c'č piu, si chiude correttamente.
Adesso ho il problema di eliminare Foglio1, e il comando Delete nella tua 
sub funziona nella mia invece no, non segnala neanche errore ma il foglio1 
rimane li.
Questo č il codice che uso:
'xCart.Sheets("Foglio1").Delete
Set Sh = xCart.Sheets("Foglio1")
Sh.Delete
    XL.Visible = True
    'ActiveWorkbook.PrintOut Copies:=1, Collate:=True
RigaChiusura:
    XL.Quit
    Set xCart = Nothing
    Set XL = Nothing
    Set Sh = Nothing


Confermo, il riferimento ad excel non c'ï¿½ piu, si chiude correttamente.
Adesso ho il problema di eliminare Foglio1, e il comando Delete nella tua
sub funziona nella mia invece no, non segnala neanche errore ma il foglio1
rimane li.
Questo ï¿½ il codice che uso:
<cut>
****************************************************
Forse continua a sfuggirmi qualcosa.
Perchï¿½ fai quel Set Sh per eliminare il foglio?
Comunque questo fa quanto mi aspetto:
Private Sub Command1_Click()
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim sh As Object
On Error GoTo RigaErrore
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("C:\Prove\tuoFile.xls")
    objExcel.Visible = True
    With objWorkbook
        With objWorkbook
            Set sh = .sheets("Foglio1")
            sh.Copy Before:=.sheets(1)
            .sheets("Foglio1 (2)").Name = "NewFoglio"
            objExcel.displayalerts = False
                sh.Delete
            objExcel.displayalerts = True
         End With
    End With
    objWorkbook.saveas "C:\Prove\tuoFile3.xls"
RigaChiusura:
    objExcel.Quit
    Set sh = Nothing
    Set objWorkbook = Nothing
    Set objExcel = Nothing
    Exit Sub
RigaErrore:
    MsgBox Err.Number & vbNewLine & Err.Description
    Resume RigaChiusura
End Sub
Io perï¿½ non so cosa altro hai aperto/fai/hai referenziato
nel tuo codice.


 nel tuo codice.
Nulla altro altro referenziato.
Ho riadattato il codice nella mia sub passo passo non omettendo nulla, e 
alla fine ho scoperto che omettevo il displayalert
           objExcel.displayalerts = False
                sh.Delete
            objExcel.displayalerts = True
Uff, che fatica, ti ringrazio per la pazienza :)
greg 

Nulla altro altro referenziato.
Ho riadattato il codice nella mia sub passo passo non omettendo nulla, e 
alla fine ho scoperto che omettevo il displayalert
           objExcel.displayalerts = False
                sh.Delete
            objExcel.displayalerts = True
Uff, che fatica, ti ringrazio per la pazienza :)
greg 
***********************************
;-)
Bene, buona giornata e buon lavoro.
