简体   繁体   中英

File Format Error When Batch convert .xls to .xlsx with VBA without opening the workbooks

I have hundreds of XLS files I need converted to XLSX.

I found this old thread with the same title and the code provided converts the files to XLSX but corrupts them.

My understanding is, this code renames the file with the proper xlsx extension but does not change the file format.

I am under the impression I need to make the file format FileFormat:=51

I tried adding ", FileFormat:=51" to the name but that did not seem to work.

Any suggestions on how I can change the FileFormat to 51?

Thank you

Love you all

    Sub ChangeFileFormat_V1()

    Dim strCurrentFileExt   As String
    Dim strNewFileExt       As String
    Dim objFSO              As Object
    Dim objFolder           As Object
    Dim objFile             As File  'Object
    Dim xlFile              As Workbook
    Dim strNewName          As String
    Dim strFolderPath       As String

    strCurrentFileExt = ".xls"
    strNewFileExt = ".xlsx"

    strFolderPath = "C:\Users\Scorpio\Desktop\New folder"
    If Right(strFolderPath, 1) <> "\" Then
        strFolderPath = strFolderPath & "\"
    End If

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.getfolder(strFolderPath)
    For Each objFile In objFolder.Files
        strNewName = objFile.Name
        If Right(strNewName, Len(strCurrentFileExt)) = strCurrentFileExt Then
            strNewName = Replace(strNewName, strCurrentFileExt, strNewFileExt)
            Application.DisplayAlerts = False
            objFile.Name = strNewName
            Application.DisplayAlerts = True
        End If
    Next objFile

``ClearMemory:
    strCurrentFileExt = vbNullString
    strNewFileExt = vbNullString
    Set objFSO = Nothing
    Set objFolder = Nothing
    Set objFile = Nothing
    Set xlFile = Nothing
    strNewName = vbNullString
    strFolderPath = vbNullString
End Sub

Like I mentioned in the comment, you cannot just change the extention and expect it to work. You are supposed to open the file and do a .SaveAs NewFilename,Fileformat for each one of them.

Is this what you are trying? ( Untested )

 Sub Sample()
    Dim strFolderPath As String
    Dim StrFile As String
    Dim NewFilename As String
    Dim wb As Workbook

    '~~> Set your folder here
    strFolderPath = "C:\Users\Scorpio\Desktop\New folder\"

    '~~> Loop through all the xls files in the folder
    StrFile = Dir(strFolderPath & "*.xls")

    Do While Len(StrFile) > 0
        '~~> Get file name without extension
        NewFilename = Left(StrFile, (InStrRev(StrFile, ".", -1, vbTextCompare) - 1))

        Set wb = Workbooks.Open(strFolderPath & StrFile)

        wb.SaveAs NewFilename & ".xlsx", FileFormat:=xlOpenXMLWorkbook
        DoEvents
        wb.Close (False)
        StrFile = Dir
    Loop
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM