Condividi:        

[Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi FabioPizz » 05/05/10 11:04

Ciao a tutti. Vi espongo il problema e ringrazio anticipatamente chiunque fosse in grado di darmi indicazioni in merito.

Con Microsoft Excel 2003 SP3 ho implementato una macro che fa il move di 8 fogli da una cartella di lavoro (quella contenente la macro) ad una nuova cartella di lavoro. L'utente ha la possibilità di scegliere quali fogli devono essere soggetti a move. E' sufficiente che l'utente vada a fleggare dei check box. Potrebbe quindi fare il move di un foglio come di tutti e 8.

E qui si presenta il problema. Normalmente quando il numero di fogli per i quali fare il move è ridotto (es. n. 2 fogli) la macro funziona, diversamente nel caso in cui il numero di fogli è maggiore di 2 la macro si blocca e restituisce il codice d'errore.

Errore di run-time '1004'
Errore nel metodo Move per la classe Worksheet


Vi anticipo che escludo possa dipendere da problemi di memoria. Ho provato ad eseguire il tutto anche su un server ben "carozzato" ma il risultato è sempre lo stesso.

L'istruzione nella quale si presenta l'errore è ad esempio:
Workbooks("Pippo.xls").Sheets("Foglio3").Move before:=Workbooks( _
Nome_File_Output).Sheets(N_Fogli_Cartella_Output)


Di seguito trovate tutta la routine.
Codice: Seleziona tutto
Sub Copia_Fogli()   
   
    Dim N_Fogli_Cartella_Output As Byte 'Numero di fogli nella cartella di output
   
    Dim i As Integer 'contatore
   
    Nome_Completo_File_Output = Worksheets("parametri").Range("Nome_Completo_File_Output")
    Nome_File_Output = Worksheets("parametri").Range("Nome_File_Output")
   
    Workbooks.Open Filename:=Nome_Completo_File_Output _
      , Password:="", WriteResPassword:=""
   
    For Rpt = 1 To 8
   
        Select Case Rpt
            Case 1
   
                If frm_Menu.chk_Andam_Rpt01.Value = True Then
                   
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
               
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio1").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                       
                       
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate                   

                End If

            Case 2
           
                If frm_Menu.chk_Andam_Rpt02.Value = True Then
               
               
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
               
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio2").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate
                   

               
                End If
           
           
            Case 3
           
                If frm_Menu.chk_Andam_Rpt03.Value = True Then                   
                     
               
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
                   
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio3").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate                   
               
                End If               
               
           
            Case 4
           
                If frm_Menu.chk_Andam_Rpt04.Value = True Then               
                   
                                       
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
               
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio4").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate                 

                End If
           
           
            Case 5
           
                 If frm_Menu.chk_Andam_Rpt05.Value = True Then               
               
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
                   
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio5").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate                   

                   
                End If
           
           
            Case 6
           
                If frm_Menu.chk_Andam_Rpt06.Value = True Then               
                   
                   
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
                   
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio6").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate                   

                   
                End If
           
           
            Case 7
           
                If frm_Menu.chk_Andam_Rpt07.Value = True Then               
                   
                   
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
                   
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio7").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate
               
               
                End If
           
           
            Case 8
           
                If frm_Menu.chk_Andam_Rpt08.Value = True Then               

                   
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
               
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio8").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate 

                End If
           
        End Select
    Next Rpt
   
    ActiveWorkbook.Save
    ActiveWorkbook.Close
   
End Sub
FabioPizz
Newbie
 
Post: 9
Iscritto il: 05/05/10 10:36

Sponsor
 

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Anthony47 » 05/05/10 14:58

Ciao FabioPizz e benvenuto nel forum.
Nell' ipotesi che il file di output sia un archivio con tanti fogli potrebbe essere necessario modificare Dim N_Fogli_Cartella_Output As Byte in
Codice: Seleziona tutto
Dim N_Fogli_Cartella_Output As Single

Se questa modifica risulta ininfluente, leggi il valore che le variabili Nome_File_Output e N_Fogli_Cartella_Output assumono al momento dell' errore, oltre a verificare che il foglio da muovere esista veramente sul workbook "pippo.xls".

Per suggerimenti sul debug consiglio la lettura di questo thread: viewtopic.php?t=65537

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Flash30005 » 05/05/10 15:02

Non ho la possibilità di provarlo ma dal tipo di errore sembrerebbe che non sia attivo il foglio che vai a muovere pertanto prova a mettere una riga di codice che seleziona il foglio prima del move, es.:
Codice: Seleziona tutto
                    Application.DisplayAlerts = False
 Workbooks("Pippo.xls").Sheets("Foglio1").select  '<<<< inserisci questa riga per ogni routine move
                    Workbooks("Pippo.xls").Sheets("Foglio1").Move


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi FabioPizz » 07/05/10 08:38

Scusate il ritardo.

Anthony47
- Il file di output contiene al più 17 fogli. L'errore non dovrebbe pertanto essere imputabile al tipo della variabile.
- Il valore assunto dalle variabili Nome_File_Output e N_Fogli_Cartella_Output è quello corretto. Non ho notato alcuna anomalia. Anche con il debug tutto sembrerebbe corretto. Inoltre i nome dei fogli da spostare è corretto. Aggiungo che, con 2 o 3 fogli, nella maggior parte delle esecuzioni non si registra alcuna anomalia ed i fogli vengono correttamente spostati a prescindere da quali siano i fogli selezionati dall'utente.

Flash30005
Ho seguito il tuo suggerimento inserendo Workbooks("Pippo.xls").Sheets("Foglio1").select dove indicato. L'istruzione non viene eseguita anche se effettivamente corretta. Si presenta l'errore:

Errore di run-time '1004'
Errore nel metodo Select per la classe Worksheet


Francamente non riesco a spiegarmi il motivo.

Aggiungo altre due informazioni non so se possano essere d'aiuto.

- Nel momento in cui si pianta l'esecuzione nel move del foglio, non risulta possibile fare una Sposta o copia neanche da excel stesso (non da VBA quindi), ovvero dalla cartella pippo selezionando il foglio, tasto destro , sposta o copia .. Excel non da nessun warning ma la copia o lo sposta non va!

- Nella cartella pippo sono definiti una miriade di nomi (oltre 900). (Intendo i nomi inseribili da excel->Menù Inserisci --> Nomi --> Definisci ) La maggior parte di questi non servono a nulla e fanno riferimento ad altre cartelle di lavoro. Putroppo cancellare solo quelli che non servono a nulla non mi risulta così semplice. Questo è il motivo per cui ho inserito le istruzioni

Application.DisplayAlerts = False
Application.DisplayAlerts = True


Avete altre idee, suggerimenti?

Grazie. Ciao.
FabioPizz
Newbie
 
Post: 9
Iscritto il: 05/05/10 10:36

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Flash30005 » 07/05/10 08:49

Ho fatto un tentativo con dei fogli e a me funziona tutto regolarmente
ma non ho il combox di scelta quindi eseguo gli 8 spostamenti

Se tu potessi inviare sia il file con macro che il file con i fogli da spostare dovrei essere in grado di trovare l'errore che a parere mio è dovuto al foglio che non è attivo ma che richiami per lo spostamento.

Per quanto riguarda excel che non "reagisce" nemmeno manualmente
penso sia dovuto al fatto che tu abbia interrotto il codice macro e quindi hai lasciato disabilitata qualche funzione di excel (tipo Application.DisplayAlerts = False, etc)

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi FabioPizz » 07/05/10 10:27

Avevo fatto anch'io la stessa prova con esito positivo.

Putroppo non posso inviare il file dato che altre macro all'interno della stessa cartella di lavoro prevedono l'accesso e lo scarico dati da un DBMS SQL SERVER. Non riusciresti ugualmente a girare. Sarebbe necessario commentare un sacco di codice..

Grazie lo stesso.
FabioPizz
Newbie
 
Post: 9
Iscritto il: 05/05/10 10:36

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Anthony47 » 07/05/10 23:29

Mi pare quindi che il problema non sia riconducibile alla macro, ma al comportamento intrinseco del file "pippo.xls"...
Qualche domanda in ordine sparso:
Ci sono fogli nascosti?
Uno dei due file e' condiviso?
L' impossibilita' a muovere da menu il worksheet e' permanente o e' temporanea?
Ed e' possibile, invece, "creare una copia" invece che spostarlo nel file di riepilogo?
Sono file creati e manipolati con XL2003 o anche con 2007?
Nel modulo ThisWorkbook ci sono delle macro?
Il foglio contiene aree collegate a dati esterni con aggiornamento periodico?
Si tratta di un pc in genere in rete? Se SI, il problema si verifica quando sei in rete o scollegato?

Vediamo se ci si accende qualche lucina...
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi FabioPizz » 10/05/10 11:40

Ecco le risposte.

- Non ci sono fogli nascosti.

- I due file non sono condivisi

- Temporanea ed apparentemente senza una logica definita. Mi spiego. La macro va in errore e
passo ad excel. Da qui, a volte riesco a fare il move da worksheet a volte no. Questo si presenta sia se è stata interrotta la macro dopo che è andata in errore sia che non sia stata interrotta.

- No anche con la copia si presenta il "medesimo" errore:

Errore di run-time '1004'
Errore nel metodo Copy per la classe Worksheet


- La cartella "pippo,xls" è stata creata con XLS 2003. Ho però modificato del codice con un XL2007 presente in un altro pc. Normalmente lavoro con il pc fisso collegato in rete e che ha XL2003. A volte lavoro con un portatile con XL2007 ma solo per scrivere codice e inserire qualche formula nei fogli di lavoro. Con il portatile non eseguo la macro non potendo accedere con quel pc alla rete aziendale.

- Il modulo thisworkbook è vuoto, non c'è una riga di codice.

- In relazione alla domanda sulla aree collegate, ti segnalo che :

-- la cartella pippo.xls non contiene collegamenti (da EXcel --> Menù modifica --> Collegamenti non è selezionabile ") e comunque non ottengo nessun messaggio all'apertura della cartella "pippo.xls"

-- accedendo alla definizione dei nomi (da excel --> Menù Inserisci --> Nomi --> Definisci) vedo centinaia di nomi molti dei quali fanno riferimento ad altre cartelle di lavoro. Tutti i nomi che fanno riferimento dl altre cartelle di lavoro, non sono stati definiti da me e non servono assolutamente a nulla. Purtroppo sono tanti e cancellandoli rischierei di eliminare nomi che invece ho definito io e che servono.

-- I fogli che vado a muovere o copiare contengono solo valori e grafici. Per i grafici, tramite vba vado a modificare il puntamento delle serie dalla cartella "pippo.xls" alla cartella di destinazione dopo che è stato effettuato il move.

- Si tratta di un pc collegato in rete. Il problema si verifica quando sono in rete. Se sono scollegato non posso accedere al DBMS Sql server per "recuperare" i dati per le elaborazioni.

Aggiungo un ulteriore elemento, non so se puù essere d'aiuto.
Supponiamo di voler fare il move dei primi 4 degli otto fogli e che si presenti l'errore vba nel tentativo di fare il move del 4° foglio. Alla successiva esecuzione della macro è molto probabile che la move vada in errore sul primo foglio e non più sul 4°. E' necessario per forza uscire da excel e rientrare per sperare che la move dei primi 4 fogli vada a buon fine.

Ciao
FabioPizz
Newbie
 
Post: 9
Iscritto il: 05/05/10 10:36

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Flash30005 » 10/05/10 12:16

Non mi convince...
secondo me non è attivo quel file di excel, qualche applicazione rende attivi altre cartelle e quindi va in errore
fai questa prova (inserisci ad ogni routine la riga evidenziata)
Codice: Seleziona tutto
        Select Case Rpt
            Case 1
    Workbooks(Nome_File_Output).Activate '<<<<<<<<<<<<<< qui
                If frm_Menu.chk_Andam_Rpt01.Value = True Then
                   
                    N_Fogli_Cartella_Output = Workbooks(Nome_File_Output).Sheets.Count
               
                    Application.DisplayAlerts = False
                    Workbooks("Pippo.xls").Sheets("Foglio1").Move before:=Workbooks( _
                       Nome_File_Output).Sheets(N_Fogli_Cartella_Output)
                       
                       
                    Application.DisplayAlerts = True
                   
                    Range("a1").Activate

                End If

            Case 2
   Workbooks(Nome_File_Output).Activate  '<<<<<<<<<<<<<<< qui
                If frm_Menu.chk_Andam_Rpt02.Value = True Thenù


'etc... per tutte le otto routine


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Postdi archimede » 10/05/10 14:00

Questo l'avete già visto?

HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Anthony47 » 10/05/10 16:02

Ovviamente e' utile verificare se quanto descritto nell' articolo Microsoft linkato da Archimede (vedi sopra) risolve il problema.
Personalmente mi sono orientato sull' idea che il foglio non puo' essere mosso, ne' in vba ne' in manuale, perche' e' in atto un aggiornamento dati sullo stesso foglio che in pratica ne' fa un lock.
In proposito, per FabioPizz, non vanno guardati i "collegamenti", ma se ci sono "query" programmate; fai cosi': salvi il file, selezioni tutte le celle del foglio, provi a cancellarle; dimmi se ti dice che ci sono delle query associate e ti chiede se cancellarle o no; poi chiudi il file SENZA SALVARLO.

Da come la racconti mi pare evidente che ci sono delle query, di cui non si puo' valutare l' impatto; pertanto il mio suggerimento e' di "copiare" tutte le celle del foglio "sorgente", "incollarne formati e valori su un nuovo foglio creato sul file target, cancellare poi il foglio sorgente. Ma non so e' proprio questo che ti interessa fare...

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi FabioPizz » 11/05/10 09:36

Flash30005
Ho inserito la riga evidenziata nei punti indicati ma il risultato non cambia

Archimede
Avevo già fatto un tentativo di salvare il salvare / aprire il file di destinazione ad ogni iterazione. Ho provato nuovamente ed il risultato non cambia

Anthony47
I fogli sottoposti a move non dovrebbero essere soggetti ad aggiornamento. Si tratta di soli dati (nessuna formula) e grafici. Le serie dei grafici in realtà puntano ad un altro foglio nella medesima cartella di lavoro ma non penso sia questa l'origine del problema..Ad ogni modo ho selezionato come consigliato tutte le celle e le ho cancellate. Nessun messaggio. Tutto il contenuto è stato rimosso eccetto i grafici e le formattazioni. Tuttavia ho notato che il tuo dubbio è fondato per altri fogli di lavoro. Si tratta di una trentina di fogli contenuti all'interno della cartella pippo.xls . In questo fogli sono presenti dei dati che scarico da sql server. Al tentativo di cancellare le celle il messaggio che ottengo è:

L'intervallo eliminato è associato ad una query utilizzata per recuperare dati da un'origine esterna. Eliminare sia la query che l'intervallo? Se si sceglie no la query recupererà nuovi dati al successivo aggiornamento SI NO

Pensate possa essere questa la causa del problema?

Francamente io non so più cosa pensare. Se ad esempio voglio fare il move dei primi 3 fogli l'esecuzione va normalmente a buon fine. Se invece voglio fare il move dei primi 4 fogli l'esecuzione va in errore nel tentativo di spostare il 3 foglio. Successivamente se non chiudo e riapro l'esecuzione andrà sicuramente in errore al primo foglio soggetto a move..

ciao
FabioPizz
Newbie
 
Post: 9
Iscritto il: 05/05/10 10:36

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Anthony47 » 11/05/10 10:28

Prima di altri ragionamenti, i nomi dei tuoi files contengono "spazi"?

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi FabioPizz » 11/05/10 13:34

La cartella con le macro non contiene spazi nel nome.

La cartella di destinazione si! Nello specifico

"Parola1_Parola2_gg mmm aaaa.xls"

Effettuo un nuovo tentativo rimuovendo gli spazi.

Ciao
FabioPizz
Newbie
 
Post: 9
Iscritto il: 05/05/10 10:36

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi FabioPizz » 11/05/10 14:10

Spazi rimossi.

L'errore purtroppo permane.

Ciao
FabioPizz
Newbie
 
Post: 9
Iscritto il: 05/05/10 10:36

Re: [Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move

Postdi Anthony47 » 11/05/10 22:11

Mah... secondo me c' e' una condizione che blocca la copy (anche la move e' una copy) fintanto che non si riavvia excel; andrebbe identificata per tentativi quale situazione provoca questo blocco, poi magari ci si accende una lucina.
Una prima prova potresti farla eliminando tutti gli intervalli con un nome, ad esempio con questa macro:

Codice: Seleziona tutto
Sub delete_named()
Dim WkRng As Range, Ws As Worksheet
Dim Dipend As Integer
Dipend = 0
On Error Resume Next
For Each Interv In ActiveWorkbook.Names
Set WkRng = Nothing
Set WkRng = Range(Interv)
  If Not WkRng Is Nothing Then
    With Range(Interv)
    Dipend = 0
    Dipend = .DirectDependents.Count
    If Dipend = 0 Then Interv.Delete
    End With
  End If
Next Interv
On Error GoTo 0
End Sub

La macro lascia solo quegli intervalli che vengono richiamati sulla stesso sheet.
Poiche' e' una prova distruttiva va fatta su una copia del file, oppure dopo aver fatto due copie di backup del file di lavoro; se la rimozione degli intervalli fosse "la chiave" allora potrei elaborare una macro che rimuove solo quei nomi che non hanno nessun utilizzo nell' intera cartella di lavoro.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel2003]Errore run-time 1004 su Workbooks.Worksheet.Move":


Chi c’è in linea

Visitano il forum: Nessuno e 80 ospiti