Newsgroup: it.comp.lang.visual-basic
Titolo: Copiare uno o più fogli Excel

Ciao a tutti
sto utilizzando il seguente codice per accere ad un foglio Excel attualmente 
aperto:
Set Excl = GetObject(, "Excel.Application")
Set Wsht = Excl.ActiveSheet
e da qui posso facilmente operare nel fogli Excel attivo.
Vorrei pero copiare all'interno della cartella Excel Attiva tutti i fogli 
presenti su un'altro file Excel che invece è chiuso.
Come possa fare? potete indicarmi qualche strada?
Grazie anticipatamente. 

 Come possa fare? potete indicarmi qualche strada?
Un consiglio generico è andare in excel, attivare il registratore di macro,
fare l'operazione manualmente e guardare poi il codice generato, di cui
puoi quasi fare il copia/incolla su VB.

 puoi quasi fare il copia/incolla su VB.
Si lo so ma non ci riesco!
Spero tu possa darmi una mano...
Ti riporto di seguito il codice che ho scritto:
Function CopiaFogli(PercorsoFile As String, NomeFile As String, 
NomeFoglioDaCopiare As String)
    Dim ExclTemp As Object
    Dim Excl As Object
    Dim Wbk As Object
    Dim Wsht As Object
    On Error Resume Next
    Set Excl = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        MsgBox "Err 03 - Impossibile continuare perchè Microsoft Excel non è 
attivo!", vbCritical
    Else
        Set Excl = CreateObject("Excel.Application")
        Set Wbk = Excl.Workbooks.Open(PercorsoFile & NomeFile, 
UpdateLinks:=0)
        Set Wsht = Excl.ActiveSheet
        Wbk.Wsht(NomeFoglioDaCopiare).Copy 
After:=Wbk("nomefileapertochenonsocomericavare.xls").Sheets(3)
        MsgBox "Fatto"
    End If
End Function
Ti riporto di seguito il codice che ho scritto per ricavare il nome del file 
correntemente aperto (che non funziona):
Private Sub Command8_Click()
    Dim Excl As Object
    Dim Wbk As Object
    Dim Wsht As Object
    On Error Resume Next
    Set Excl = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        MsgBox "Err 03 - Impossibile continuare perchè Microsoft Excel non è 
attivo!", vbCritical
    Else
        Set Excl = CreateObject("Excel.Application")
        Set Wbk = Excl.Workbooks
        Set Wsht = Excl.ActiveSheet
        MsgBox "NomeFoglio = " & Wsht.Name 'Non funziona
        MsgBox "NomeFile = " & Wbk.Name 'Non funziona
        MsgBox "Fatto"
    End If
End Sub
Grazie in anticipo!

 Grazie in anticipo!
Non posso guardarti il codice, ma a me questo funziona
On Error GoTo Err
Set exclApp = GetObject(, "Excel.Application")
Resuming:
    With exclApp
        .Visible = True
        With .ActiveWorkbook
            Set WKS = .Worksheets.Add
            debug.print WKS.Name		'nome file
            For NN = 1 To .Sheets.Count
                debug.print .Sheets(NN).Name	'nome fogli
            Next NN
        End With
    End Withů
WKS.SaveAs mioPath
Err:
    If Err = 429 Then
        'Se Excel non č aperto
        Err.Clear
        Set exclApp = CreateObject("Excel.Application")
        exclApp.Workbooks.Add
        Resume Resuming
    End If

 Non posso guardarti il codice, ma a me questo funziona
Ti ringrazio per la risposta, ma ora dato per scontato che modificando il 
tuo codice sono riuscito a ricavarmi il nome del file XLS aperto con la 
seguente funziona vorrei copiare un foglio da un file XLS chiuso al file 
aperto di cui ho ricavato il nome.
Non mi viene emesso nessun errore, ma l'operazione non viene eseguita
Sono poche righe di codice, puoi darci un'occhiata? a me sembra tutto a 
posto....
Function CopiaFogli(PercorsoFile As String, NomeFile As String, 
NomeFoglioDaCopiare As String)
    Dim Excl As Excel.Application
    Dim WBK As Workbook
    Dim Wsht As Worksheet
    On Error Resume Next
    Set Excl = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        MsgBox "Err 03 - Impossibile continuare perchè Microsoft Excel non è 
attivo!", vbCritical
    Else
        Set Excl = CreateObject("Excel.Application")
        Set WBK = Excl.Workbooks.Open(PercorsoFile & NomeFile, 
UpdateLinks:=0)
        Set Wsht = Excl.ActiveSheet
        Wsht.Copy after:=Workbooks("NomeDelFileAperto.xls").Sheets(3)


 posto....
Prova a debuggare.
Purtroppo ora non ho tempo di provare, ma prova ad aprire entrambi i file.
Dal registratore di macro mi vien fuori:
    Sheets("Foglio1").Select
    Sheets("Foglio1").Copy Before:=Workbooks("Cartel1").Sheets(1)
Forse ti manca la select che altrimenti non fai la copy
Prova a partire da qua:
http://support.microsoft.com/kb/288402/it

 Forse ti manca la select che altrimenti non fai la copy
Ti ringrazio per la risposta,
ho provato a modificare il codice come segue, ma, pur aprendo il file 
chiuso, non funziona lo stesso! non so più che pesci pigliare!
"prova.xls" è il file aperto prima di avviare la funzione
Function CopiaFogli(PercorsoFile As String, NomeFile As String, 
NomeFoglioDaCopiare As String)
    Dim Excl As Excel.Application
    Dim WBK As Workbook
    Dim Wsht As Worksheet
    On Error Resume Next
    Set Excl = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        MsgBox "Err 03 - Impossibile continuare perchè Microsoft Excel non è 
attivo!", vbCritical
    Else
        Set Excl = CreateObject("Excel.Application")
        Set WBK = Excl.Workbooks.Open(PercorsoFile & NomeFile, 
UpdateLinks:=0)
        With Excl
            .Visible = True
            With .ActiveWorkbook
                .Sheets(NomeFoglioDaCopiare).Select
                .Sheets(NomeFoglioDaCopiare).Copy 
Before:=Workbooks("prova.xls").Sheets(1)
            End With
        End With


 ha scritto nel messaggio 
news:47f4c673$0$37199$4faf...@reader3.news.tin.it...

Il file "prova.xls" l'hai già aperto quando esegui la funzione?
Ciao.
-- 
Sergio MAZZA 

 Il file "prova.xls" l'hai già aperto quando esegui la funzione?
Si esatto è già aperto.
Grazie 

 Grazie
Il codice è un po' lungo per quello che deve fare (servirebbe solo l'istanza 
Excel.Application) ma la sequenza sembra giusta, tranne per il riferimento 
al foglio "prova.xls" quando lo indichi come destinazione della copia.
Non hai inserito il punto per indicare che fa parte dell'oggetto padre Exl:
With Exl
    With .ActiveWorkbook
...
        .Sheets(NomeFoglioDaCopiare).Copy Before:= 
.Workbooks("prova.xls").Sheets(1)
...
    End With
End With
Ciao.
-- 
Sergio MAZZA 

Before:=Workbooks("prova.xls").Sheets(1)
Non so come funziona vb, ma forse non accetta per un oggetto i parametri denominati
(before).
A me questo funziona:
In excel ho registrato e modificato questa macro. Backup.xls è un documento vuoto con
almeno "foglio1"
Apre due file excel e copia un foglio da un file all'altro.
Il paste non c'è. E' un parametro di copy, per i fogli.
set xl=createobject("excel.application")
xl.workbooks.Open "C:\dati\excel\Goldrake.xls"
    xl.Sheets("Foglio1").Select
    xl.Workbooks.Open "C:\dati\excel\Backup.xls"
    xl.Windows("Goldrake.xls").Activate
    xl.Sheets("Foglio1").Select
    xl.Sheets("Foglio1").Copy xl.Workbooks("Backup.xls").Sheets(1)
    xl.Sheets("Foglio1 (2)").Select
    xl.Sheets("Foglio1 (2)").Name = "Backup Goldrake"
 
xl.activeworkbook.save
xl.Windows("Goldrake.xls").Activate
xl.activeworkbook.save
xl.quit
set xl=nothing
-- 
Giovanni Cenati (Bergamo, Italy)
Write to user "Reventlov" and domain at katamail com
http://digilander.libero.it/Cenati
 (Esempi e programmi in VbScript)
--