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