Acho que abrir o arquivo em questão no Excel e investigar a propriedade FileFormat
da pasta de trabalho com o VBA deve resolver o problema. Isso deve funcionar porque o Excel detecta automaticamente o tipo de arquivo corretamente quando você o abre.
Como você tem muitos arquivos, eu recomendaria um programa VBA para fazer o loop de todos os arquivos (é melhor colocá-los todos em uma pasta). Em seguida, abra-os um após o outro, verifique o FileFormat
, salve o resultado em algum lugar e feche o arquivo novamente.
Você também pode renomear os arquivos no loop, dependendo do formato do arquivo.
Você poderia usar um código como este:
Option Explicit
Public Sub TestExcelFileFormats(ByVal strPath As String, Optional ByVal boolTestOnly As Boolean = True)
Dim fso As New Scripting.FileSystemObject
Dim fileExcel As Scripting.File
Dim wbkOutput As Workbook
Dim shtOutput As Worksheet
Dim wbkTestFile As Workbook
Dim i As Long
Dim strCorrectExtension As String
Set wbkOutput = Workbooks.Add
Set shtOutput = wbkOutput.Sheets(1)
shtOutput.Name = "Output"
shtOutput.Cells(1, 1) = "Filename"
shtOutput.Cells(1, 2) = "Old Extension"
shtOutput.Cells(1, 3) = "File Format"
shtOutput.Cells(1, 4) = "New Extension"
i = 2
For Each fileExcel In fso.GetFolder(strPath).Files
Set wbkTestFile = Nothing
On Error Resume Next
Set wbkTestFile = Workbooks.Open(fileExcel.Path)
On Error GoTo 0
If Not wbkTestFile Is Nothing Then
shtOutput.Cells(i, 1) = fileExcel.Path
shtOutput.Cells(i, 2) = fso.GetExtensionName(fileExcel.Name)
shtOutput.Cells(i, 3) = wbkTestFile.FileFormat
Select Case wbkTestFile.FileFormat
Case xlOpenXMLWorkbook:
strCorrectExtension = "xlsx"
Case xlOpenXMLWorkbookMacroEnabled:
strCorrectExtension = "xlsm"
Case xlExcel3, xlExcel4, xlExcel5:
strCorrectExtension = "xls"
Case xlExcel12:
strCorrectExtension = "xlsb"
Case Else:
' unknown file format - you probably want to add it to one of the above cases
strCorrectExtension = fso.GetExtensionName(fileExcel.Name)
End Select
wbkTestFile.Close False
If strCorrectExtension <> fso.GetExtensionName(fileExcel.Name) Then
If Not boolTestOnly Then fso.MoveFile fileExcel.Path, fso.BuildPath(fileExcel.ParentFolder, fso.GetBaseName(fileExcel.Name) & "." & strCorrectExtension)
shtOutput.Cells(i, 4) = strCorrectExtension
End If
i = i + 1
End If
Next fileExcel
wbkOutput.Activate
End Sub
Antes de fazer uma renomeação real, chame este procedimento com o segundo parâmetro definido como True
(o padrão). Isso apenas exibirá uma lista do que o programa would
fará se você definir o segundo parâmetro como False
.
E você deve definitivamente verificar as Case
es com as constantes de formato de arquivo primeiro. Verifique se estão corretas e adicione as que estão faltando.