Excel宏将xlsx转换为xls

use*_*210 5 excel vba excel-vba

我在文件夹中有一堆文件,所有这些都是xlsx格式化的,我需要将它们转换为xls格式.这将在每日基础上完成.

我需要一个宏来循环文件夹并将文件从xlsx转换为xls而不更改文件名.

这是我用来循环的宏

Sub ProcessFiles()
Dim Filename, Pathname As String
Dim wb As Workbook

Pathname = ActiveWorkbook.Path & "C:\Users\myfolder1\Desktop\myfolder\Macro\"
Filename = Dir(Pathname & "*.xls")
Do While Filename <> ""
    Set wb = Workbooks.Open(Pathname & Filename)
    DoWork wb
    wb.Close SaveChanges:=True
    Filename = Dir()
Loop
End Sub
Run Code Online (Sandbox Code Playgroud)

Gle*_*ens 8

您缺少的是wb.Close SaveChanges=True,您需要wb.SaveAs使用新的文件格式和名称调用,而不是调用以另一种格式保存文件.

你说你想在不改变文件名的情况下转换它们,但我怀疑你真的想要用相同的基本文件名保存它们,但是.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
Run Code Online (Sandbox Code Playgroud)