Consulting

Results 1 to 6 of 6

Thread: OPEN: Excel Macro Save As with a new file name

  1. #1
    VBAX Newbie
    Joined
    Jan 2014
    Posts
    2
    Location

    OPEN: Excel Macro Save As with a new file name

    Microsoft Excel 2010

    Sub XLS_TO_CSV()
    '
    ' XLS_TO_CSV Macro
    '
    ' Keyboard Shortcut: Ctrl+m
    '
    Application.ActiveProtectedViewWindow.Edit
    ChDir "C:\Users\mokk083\Desktop\Work in Progress\Graduate"
    ActiveWorkbook.SaveAs Filename:= _
    "C:\Users\mokk083\Desktop\Work in Progress\Graduate\File_Name_1" _
    , FileFormat:=xlCSV, CreateBackup:=False
    End Sub
    Hello,

    I have to open up over 100 .xls files, and save as individually as a .csv comma delimited file.

    I used the record macro button, and I got the above code.

    However, the issue is when I open up a second file and run the macro, NOT File_Name_1 ie File_Name_2, it saves as File_Name_1. I don't know what to put in ActiveWorkbook.SaveAs Filename:=, and I need help. I wish that the macro would take the file name, and save it using that file name, instead of the file name I used when I first recorded the macro.

    Also, I dont know if ChDir "C:\Users\mokk083\Desktop\Work in Progress\Graduate" will make it so the macro only save the file in that specific folder.
    Can anyone please tell me how to make it so it default saves in the folder that the original file was in?

    Thank you,
    Ka

    Edit: Is there another way (free) that anyone knows to convert bulks of .xls to .csv?
    Last edited by mokk083; 01-16-2014 at 08:45 AM. Reason: Added additional question

  2. #2
    VBAX Regular
    Joined
    Dec 2013
    Posts
    15
    Location
    Try this out.

    Sub SaveCSV()
    
        Dim path As String, excelfile As String, fname As Variant
        path = "C:\Users\mokk083\Desktop\Work in Progress\Graduate\"
        ChDir path
        excelfile = Dir(path & "*.xls")
        Do While excelfile <> ""
            fname = Split(excelfile, ".")
            Workbooks.Open filename:=path & excelfile
            ActiveWorkbook.SaveAs filename:=path & fname(0), FileFormat:=xlCSV
            ActiveWorkbook.Close
            excelfile = Dir
        Loop
    
    End Sub

  3. #3
    VBAX Newbie
    Joined
    Jan 2014
    Posts
    2
    Location
    Hello,

    Thank you very much.

    From what I can tell, if I edit the 2nd line,
    path = "C:\Users\mokk083\Desktop\Work in Progress\Graduate\", I can change what folder to put all the .XLS files into.

    As I changed :
    path = "C:\Users\mokk083\Desktop\Work in Progress\Graduate\" to path = "C:\Users\mokk083\Desktop\Work in Progress\", I was hoping that it would convert all .XLS in the Work In Progress folder, including all subfolders. But it doesn't. Is it possible to make it so ALL subfolders inside C:\Users\mokk083\Desktop\Work in Progress\ to convert to .csv?

    Also, Can anyone tell me a good source for me to learn about other aspects of this code? such as what Loop, Do While,
    Dir(path & "*.xls"). I want to help other people on the forum in the future. I am a total beginner.

    Ka
    Last edited by mokk083; 01-16-2014 at 11:03 AM.

  4. #4
    VBAX Regular
    Joined
    Dec 2013
    Posts
    15
    Location
    That will only look into the files in the "path" folder not sub folders. Try this to look into all the sub folders.

    Sub SaveCSV_AllFolders()
    
        Dim FileSys As Object
        Dim objFolder As Object
        Dim objSubFolder As Object
        Dim Path As String, excelfile As String, fname As Variant
        
        Set FileSys = CreateObject("Scripting.FileSystemObject")
        Set objFolder = FileSys.GetFolder("C:\Users\mokk083\Desktop\Work in Progress\")
        
        excelfile = Dir(objFolder & "\*.xls")
        Do While excelfile <> ""
            fname = Split(excelfile, ".")
            Workbooks.Open filename:=objFolder & "\" & excelfile
            ActiveWorkbook.SaveAs filename:=objFolder & "\" & fname(0), FileFormat:=xlCSV
            ActiveWorkbook.Close
            excelfile = Dir
        Loop
        
        For Each objSubFolder In objFolder.SubFolders
            excelfile = Dir(objSubFolder & "\*.xls")
            Do While excelfile <> ""
                fname = Split(excelfile, ".")
                Workbooks.Open filename:=objSubFolder & "\" & excelfile
                ActiveWorkbook.SaveAs filename:=objSubFolder & "\" & fname(0), FileFormat:=xlCSV
                ActiveWorkbook.Close
                excelfile = Dir
            Loop
        Next
    
    End Sub
    Also, Can anyone tell me a good source for me to learn about other aspects of this code? such as what Loop, Do While, Dir(path & "*.xls"). I want to help other people on the forum in the future. I am a total beginner.
    I can't figure out how to post a link. I keep getting an error. There is a thread on here with a lot of good resources. Try searching for "need to concentrate on VBA itself".

  5. #5
    @ vert
    i would believe that your code would only work to first level subfolders, better to use recursive procedure to do all levels of subfolders

  6. #6
    VBAX Regular
    Joined
    Dec 2013
    Posts
    15
    Location
    westconn1,

    Thanks, I wasn't even thinking multi level subfolders.

    Sub SeachXLS()
    Dim FileSys As Object
    Dim objFolder As Object
    
        Set FileSys = CreateObject("Scripting.FileSystemObject")
        Set objFolder = FileSys.GetFolder("C:\Users\mokk083\Desktop\Work in Progress\")
    
        RecursiveSearch objFolder, "*.xls"
        
        Set objFolder = Nothing
        Set FileSys = Nothing
    End Sub
    
    Sub RecursiveSearch(Folder As Object, Search As String)
    Dim Fld As Object
    Dim File As Object
    dim fname as Variant
    
        For Each Fld In Folder.SubFolders
            RecursiveSearch Fld, Search
        Next
        
        For Each File In Folder.Files
                fname = Split(File.Name, ".")
                If fname(1) Like "xls*" Then
                    Workbooks.Open filename:=File
                    ActiveWorkbook.SaveAs filename:=Folder & "\" & fname(0), FileFormat:=xlCSV
                    ActiveWorkbook.Close savechanges:=False
                End If
        Next
    End Sub
    Last edited by vert; 01-21-2014 at 08:41 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •