Что вам не хватает в том, что вместо вызова wb.Close SaveChanges=True
, чтобы сохранить файл в другом формате, вам нужно позвонить wb.SaveAs
с новым файлом format и имя.
Вы сказали, что хотите их конвертировать без изменения имени файла, но я подозреваю, что вы действительно хотите сохранить их с тем же именем базового файла, но с расширением .xls
. Так что если книга называется book1.xlsx
, вы хотите сохранить ее как book1.xls
. Чтобы рассчитать новое имя, вы можете сделать простой Replace()
по старому имени, заменив расширение .xlsx
.xls
.
Вы также можете отключить проверку совместимости, установив wb.CheckCompatibility
и подавить оповещения и сообщения, установив Application.DisplayAlerts
.
Sub ProcessFiles()
Dim Filename, Pathname, saveFileName As String
Dim wb As Workbook
Dim initialDisplayAlerts As Boolean
Pathname = "<insert_path_here>" ' Needs to have a trailing \
Filename = Dir(Pathname & "*.xlsx")
initialDisplayAlerts = Application.DisplayAlerts
Application.DisplayAlerts = False
Do While Filename <> ""
Set wb = Workbooks.Open(Filename:=Pathname & Filename, _
UpdateLinks:=False)
wb.CheckCompatibility = False
saveFileName = Replace(Filename, ".xlsx", ".xls")
wb.SaveAs Filename:=Pathname & saveFileName, _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
wb.Close SaveChanges:=False
Filename = Dir()
Loop
Application.DisplayAlerts = initialDisplayAlerts
End Sub
Большой материал. Благодарю. – Teson