Saturday, January 19, 2013

Save Workbook as New File using VBA in Excel

Q. How Save Workbook as New File? A. Use the following VBA code:
Private Sub SaveWorkbookAsNewFile(NewFileName As String)
    Dim ActSheet As Worksheet
    Dim ActBook As Workbook
    Dim CurrentFile As String
    Dim NewFileType As String
    Dim NewFile As String
 
    Application.ScreenUpdating = False    ' Prevents screen refreshing.

    CurrentFile = ThisWorkbook.FullName
 
    NewFileType = "Excel Files 1997-2003 (*.xls), *.xls," & _
               "Excel Files 2007 (*.xlsx), *.xlsx," & _
               "All files (*.*), *.*"
 
    NewFile = Application.GetSaveAsFilename( _
        InitialFileName:=NewFileName, _
        fileFilter:=NewFileType)
 
    If NewFile <> "" And NewFile <> "False" Then
        ActiveWorkbook.SaveAs Filename:= NewFile, _
            FileFormat:=xlNormal, _
            Password:="", _
            WriteResPassword:="", _
            ReadOnlyRecommended:=False, _
            CreateBackup:=False
 
        Set ActBook = ActiveWorkbook
        Workbooks.Open CurrentFile
        ActBook.Close
    End If
 
    Application.ScreenUpdating = True
End Sub
 
How does it work? Let's look inside.
  • First, turn off screen updating:
    Application.ScreenUpdating = False
     
     
  • Store the opened file full path:
    CurrentFile = ThisWorkbook.FullName
    
    
  • Open window to choose new filename and folder:
  • NewFile = Application.GetSaveAsFilename( _
        InitialFileName:=NewFileName, _
        fileFilter:=NewFileType)
     
  • And now save file as new Workbook:
  • ActiveWorkbook.SaveAs Filename:= NewFile, _
        FileFormat:=xlNormal, _
        Password:="", _
        WriteResPassword:="", _
        ReadOnlyRecommended:=False, _
        CreateBackup:=False
     
  • We have to close new file and open the origin workbook:
  • Set ActBook = ActiveWorkbook
    Workbooks.Open CurrentFile
    ActBook.Close
     
  • and turn on screen updating:
    Application.ScreenUpdating = True

1 comment: