Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Copiare i fogli di lavoro tra worksheets

275 views
Skip to first unread message

cp...@libero.it

unread,
Mar 3, 2001, 1:35:41 PM3/3/01
to
Non riesco a copiare i fogli da una cartella all'altra.
Come macro funziona, e funziona anche se dall'interno del codice premo F8 ed
eseguo le istruzioni.
Se però lancio la sub da un cmdCommand1 mi da l'errore run time 1004 "Errore
nel metodo Copy per la classe Worksheet."
non riesco proprio a trovare il modo.
qualcuno può aiutarmi ?


Maurizio Borrelli

unread,
Mar 3, 2001, 6:36:58 PM3/3/01
to
> cp...@libero.it:

> Non riesco a copiare i fogli da una cartella all'altra.

Allora l'oggetto avrebbe dovuto essere:

Copiare i fogli di lavoro tra Workbooks

;-)

Poi c'e` il problema dell'ambiguita` del termine "cartella": "cartella" nel
senso di directory o di "cartella di lavoro" di Excel?

> Come macro funziona, e funziona anche se dall'interno del codice premo F8
ed eseguo le istruzioni.
> Se però lancio la sub da un cmdCommand1 mi da l'errore run time 1004
"Errore nel metodo Copy per la classe Worksheet."
> non riesco proprio a trovare il modo.
> qualcuno può aiutarmi ?

E` probabilmente un problema di "focus". Quando fai clic sul pulsante e`
l'oggetto pulsante che ha il fuoco, non il foglio di lavoro, quindi le tue
istruzioni che si riferiscono all'oggetto attivo potrebbero riferirsi al
pulsante. Metti come prima istruzione della procedura qualcosa del tipo:

Range("A1").Select

Ma potrebbe anche essere altro. Sai com'e`... senza vedere il codice si
possono solo fare ipotesi.

--
Ciao.
Maurizio
--------
?SPQR(C)
X
--------


cp...@libero.it

unread,
Mar 4, 2001, 3:45:49 PM3/4/01
to
Hai ragione, sono stato poco chiaro , la situazione č questa :
Ho in uso un workbook di elaborazione fatture, alla conferma della fattura
voglio spostare la fattura stessa in un'altro workbook di archiviazione.
Ed č qui che, quando clicco il button cmdConferma posto nel foglio di lavoro
della fattura mi da l'errore.
La routine situata in modulo1.bas che esegue quando clicco č questa:
Public Sub confermaDocumento()

nomefoglio = ActiveSheet.Name
Workbooks.Open
FileName:="C:\WINDOWS\Desktop\Fatture\Fatture.xls"
Windows("ft.xls").Activate
Sheets(nomefoglio).Select
Windows("Fatture.xls").Activate
Workbooks("Ft.xls").Sheets(nomefoglio).Copy Before:=Workbooks _
("Fatture.xls").Sheets(1)
ActiveWorkbook.Save
ActiveWorkbook.Close
Sheets("Avvio").Select
End Sub

Spero di essere stato piů chiaro.
Grazie per la risposta
ciao Pietro

Maurizio Borrelli <maurizio...@tin.it> wrote in message
ODxoflDpAHA.1552@tkmsftngp04...


> > cp...@libero.it:
> > Non riesco a copiare i fogli da una cartella all'altra.
>
> Allora l'oggetto avrebbe dovuto essere:
>
> Copiare i fogli di lavoro tra Workbooks
>
> ;-)
>
> Poi c'e` il problema dell'ambiguita` del termine "cartella": "cartella"
nel
> senso di directory o di "cartella di lavoro" di Excel?
>
> > Come macro funziona, e funziona anche se dall'interno del codice premo
F8
> ed eseguo le istruzioni.

> > Se perň lancio la sub da un cmdCommand1 mi da l'errore run time 1004


> "Errore nel metodo Copy per la classe Worksheet."
> > non riesco proprio a trovare il modo.

> > qualcuno puň aiutarmi ?

Maurizio Borrelli

unread,
Mar 4, 2001, 9:55:27 PM3/4/01
to
> cp...@libero.it:
> > Maurizio Borrelli:

> > > cp...@libero.it:
> > > Non riesco a copiare i fogli da una cartella all'altra.
> > Allora l'oggetto avrebbe dovuto essere:
> > Copiare i fogli di lavoro tra Workbooks
> > ;-)
> > Poi c'e` il problema dell'ambiguita` del termine "cartella": "cartella"
nel senso di directory o di "cartella di lavoro" di Excel?
> > > Come macro funziona, e funziona anche se dall'interno del codice premo
F8 ed eseguo le istruzioni.
> > > Se però lancio la sub da un cmdCommand1 mi da l'errore run time 1004

"Errore nel metodo Copy per la classe Worksheet."
[...]

> > E` probabilmente un problema di "focus". Quando fai clic sul pulsante e`
l'oggetto pulsante che ha il fuoco, non il foglio di lavoro, quindi le tue
istruzioni che si riferiscono all'oggetto attivo potrebbero riferirsi al
pulsante. Metti come prima istruzione della procedura qualcosa del tipo:
> > Range("A1").Select
> > Ma potrebbe anche essere altro. Sai com'e`... senza vedere il codice si
possono solo fare ipotesi.
> Hai ragione, sono stato poco chiaro , la situazione è questa :

> Ho in uso un workbook di elaborazione fatture, alla conferma della fattura
voglio spostare

*Spostare* o *copiare*?!? ;-) Finora si era parlato di copiare...

> la fattura stessa in un'altro workbook di archiviazione.

> Ed è qui che, quando clicco il button cmdConferma posto nel foglio di


lavoro della fattura mi da l'errore.
> La routine situata in modulo1.bas

E adesso da dove salta fuori "modulo1.bas"? Stai lavorando col Visual Basic
di Excel o con Visual Basic e basta?

> che esegue quando clicco è questa:


> Public Sub confermaDocumento()
> nomefoglio = ActiveSheet.Name
> Workbooks.Open FileName:="C:\WINDOWS\Desktop\Fatture\Fatture.xls"
> Windows("ft.xls").Activate
> Sheets(nomefoglio).Select
> Windows("Fatture.xls").Activate
> Workbooks("Ft.xls").Sheets(nomefoglio).Copy Before:=Workbooks _
> ("Fatture.xls").Sheets(1)
> ActiveWorkbook.Save
> ActiveWorkbook.Close
> Sheets("Avvio").Select
> End Sub

Potresti anche limitarti alle sole istruzioni necessarie. Per esempio:

Option Explicit

Public Sub confermaDocumento()
Dim nomefoglio As String
nomefoglio = ActiveSheet.Name
With Workbooks.Open(FileName:="C:\WINDOWS\Desktop\Fatture\Fatture.xls")
Workbooks("Ft.xls").Sheets(nomefoglio).Copy Before:=.Sheets(1)
.Close SaveChanges:=True
End With


Sheets("Avvio").Select
End Sub

ma, a parte questo, non riesco ad immaginare perche' il tuo codice non
funzioni. Ancora una volta, pero`, hai tralasciato di informarci sulla
questione importante: affermi che tutto funziona finche' non lanci la
procedura per mezzo di un pulsante. Dovresti quindi spendere qualche parola
in piu` su questo pulsante. Di che pulsante si tratta? Di un "Pulsante di
comando" della barra "Casella degli strumenti" o di un "Pulsante" della
barra "Moduli"?
Nel primo caso dovresti avere anche una procedura-evento del tipo:

Option Explicit

Private Sub CommandButton1_Click()
confermaDocumento
End Sub

posta nel modulo del foglio che ospita tale pulsante.

Nel secondo caso, invece, avrai assegnato al pulsante la macro
"confermaDocumento".

Io ho testato entrambe le soluzioni e non ho riscontrato nessun errore. Dove
si trova il pulsante? Ha caratteristiche particolari?

Inoltre da come scrivi il codice ho il sospetto che tu non usi "Option
Explicit". Consulta la guida in proposito.

Mi dispiace, non mi viene in mente altro.

cp...@libero.it

unread,
Mar 7, 2001, 12:26:40 PM3/7/01
to
Accidenti, non mi sembrava di tralasciare cosě tante informazioni.
Per semplificare la cosa posso dire che ho provato a :

- Creare una nuova cartella.
- Inserirci un pulsante dalla 'casella degli strumenti'
- Programmare l'evento click con il codice che mi hai passato :

Private Sub CommandButton1_Click()


Dim nomefoglio As String
nomefoglio = ActiveSheet.Name

With Workbooks.Open(FileName:="C:\Fatture\Ft2001.xls")
Workbooks("Cartel1").Sheets(nomefoglio).Copy Before:=.Sheets(1)


.Close SaveChanges:=True
End With

End Sub

E mi da ancora il famigerato errore!
testualmente :
Errore di run-time '1004':


Errore nel metodo Copy per la classe Worksheet.

Nel err.source trovo "Microsoft Excel"
Ho provato a reinstallare office97, ma niente.
Mi rimane ancora da reinstallare VB5 ma non credo sia coinvolto.(uso Vba)
Ora ho momentaneamente aggirato il problema creando una macro che, lanciata
come tale (e non dal pulsante) funziona. Ma devo trovare il modo di
utilizzare questo metodo.

Ps. tutto ciň č comune sia al metodo copy che al move.
Spero che ti venga in mente qualche dritta.
Ciao, Pietro.

0 new messages