2013-08-09 1 views
0

J'ai ce code qui est utilisé pour obtenir un fichier prêt à enregistrer et à enregistrer, mais Excel provoque une erreur et se ferme. J'ai épinglé l'erreur à la ligne .execute.Erreur lors de l'utilisation de Application.FileDialog (msoFileDialogSaveAs)

Pourquoi cela cause-t-il le crash et y a-t-il un travail?

Sub Save_close() 

    Dim Ws As Worksheet 
    Dim Wb As Workbook 

    Application.DisplayAlerts = False 

    MsgBox "Do you want to Save a new copy", vbYesNo, "Save New" 

    If vbYes Then 

     Workbooks("A380 Master.xlsm").Sheets("OutPutSheet").Range("C:C", "F:F").Delete 

    For Each Ws In ActiveWorkbook.Sheets 
     If Not Ws.Name = "OutputSheet" Or Ws.Name = "Sheet1" Then 
      Ws.Delete 

     ElseIf Ws.Name = "OutputSheet" Or Ws.Name = "Sheet1" Then 

     End If 
    Next Ws 

    With Application.FileDialog(msoFileDialogSaveAs) 
     .Show 
     .Execute 
    End With 

    ElseIf vbNo Then 

     'Workbooks("A380 Master.xlsm").Sheets("OutPutSheet").Range("A1").Select 
    End If 

End Sub 
+1

avez-vous une raison d'utiliser 'FileDialog'? essayez avec [cette méthode Workbook.SaveAs'] (http://msdn.microsoft.com/en-us/library/ff841185%28v=office.14%29.aspx) à la place. –

+0

Deux autres astuces: 1. votre «if» à l'intérieur de la boucle ne semble pas logique. 2. Lorsque vous souhaitez supprimer toutes les feuilles répondant aux critères, vous devez utiliser différents types de boucles: 'Pour i = Activeworkbook.Sheets.Count à 1 étape -1' et ensuite vous devrez changer' Ws variable' dans la boucle en Sheets (i) 'référence d'objet. –

+0

En outre, il semble que vous mélangez des références à 'Workbooks (" A380 Master.xlsm ")' et 'ActiveWorkBook': Est-ce que ces entités sont distinctes? Sinon, vous pourriez envisager de vous y référer d'une seule façon (par exemple, ThisWorkBook) –

Répondre

1

Pour résumer les commentaires ci-dessus, une solution serait:

Sub Save_close() 

Dim Ws As Worksheet 
Dim Wb As Workbook 
Dim i as Long 

Application.DisplayAlerts = False 

Set Wb = Workbooks("A380 Master.xlsm") 

If (MsgBox("Do you want to Save a new copy", vbYesNo, "Save New")) = vbYes Then 

    Wb.Sheets("OutPutSheet").Range("C:C", "F:F").Delete 

    For i = Wb.Sheets.Count to 1 step -1 
     Set Ws = Wb.Sheets(i) 
     ' Delete all except "OutputSheet" and "Sheet1" 
     If Not (Ws.Name = "OutputSheet" Or Ws.Name = "Sheet1") Then 
      Ws.Delete 
    ' ElseIf Ws.Name = "OutputSheet" Or Ws.Name = "Sheet1" Then 

     End If 
    Next i 

    Wb.SaveAs 

Else 

    'Workbooks("A380 Master.xlsm").Sheets("OutPutSheet").Range("A1").Select 
End If 

End Sub 
Questions connexes