Excel2007之前的格式是。xls,之后的格式是。xlsx。打开一个单独的Excel文档,使用“另存为”功能轻松转换格式。但是面对上百个Excel表格太累了。找了半天也没找到一个可以直接批量转换格式的工具。
最后发现可以用VBA实现Excel格式批量转换的功能。别害怕,我也不认识VBA。我是从别人那里拿到代码的,现在只是知道怎么用,但是已经足够解决问题了。
VBA简介:
1.VBA是一种编程语言,依赖办公软件,不能独立运行。它可以通过VBA实现各种办公软件操作的自动化。
2.Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,主要用于扩展Windows的应用功能。使用Excel的VBA开发的Excel文档,在Excel中运行时需要打开Excel的宏功能,否则该文档的VBA自动化功能将被完全屏蔽,文档的功能无法实现。
执行条件:
1.Office2007及以上版本的Excel
2.Excel启用宏
功能介绍:
先介绍一下这两个工具的功能,大家可以根据需要下载。
【xls-To-xlsx.xl***】
遍历中的所有文件。xls格式的文件夹目录,包括子目录,执行“另存为”操作,然后另存为文件。xlsx格式的同名文件放在原文件的当前位置。
例如:
中有4个文件。执行前[xls-To-xlsx.xl***]所在文件夹中的xls格式;
同时,它包含一个子文件夹,其中也包含4个文件。xls格式。
执行后,将生成以下文件(用红色虚线标记):
【转换为xlsx.xl***】
遍历中的所有文件。xls格式在文件夹目录下(不包括子目录),执行“另存为”操作,然后在当前路径下生成一个xlsx文件夹,所有新生成的文件都放在这个文件夹下。
例如:
中有四个文件。执行前[Convert-TO-xlsx.xl***]所在的[Convert-TO-xlsx]文件夹中的xls格式。
执行后,将生成以下文件(用红色虚线标记):
执行方法:
1.下载附件,或者创建一个新的Excel
2.启用宏操作。
正常情况下,当你打开Excel时,会弹出如下警告。如果弹出这个警告,可以直接启用;
如果没有出现,请参考“如何在Excel中设置和启用宏功能”一文
3.编写并执行VBA代码。
这一步绝对不适合新手。有关详细的图形介绍,请参考“Excel VBA概述”一文。
这里只是简单解释一下:
(a) 在工作表界面按下组合快捷键【Alt+F11】或者【右键单击任意一个工作表标签,在弹出的右键快捷菜单单击“查看代码”】进入VBA编辑环境(b) 如果是下载的我的工具,可以跳过此步骤;如果是新建的Excel,此时在VBA编辑环境中的“代码窗口”***粘贴下方 VBA代码内容
【xls-To-xlsx.xl***】VBA代码内容
或者
《Convert-TO-xlsx.xl***》VBA代码内容
两个代码中的一个(c) 按下【F5】快捷键执行这段代码或者在菜单中单击【运行子过程/用户窗体(F5)】按钮
PS:需要注意的是,在执行过程中,不要做其他操作,否则可能会中断程序的运行。
VBA代码内容
[xls-to-xlsx.xl***] VBA代码内容
'***********访问当前文件夹目录下所有子文件夹及文件,Dim iFile(1 To 100000) As StringDim count As IntegerSub xls2xlsx() iPath = ThisWorkbook.Path On Error Resume Next count = 0 zdir iPath For i = 1 To count If iFile(i) Like "*.xls" And iFile(i) <> ThisWorkbook.FullName Then '请注意区分目录下文件后缀.xls大小写 MyFile = iFile(i) FilePath = Replace(MyFile, ".xls", ".xlsx") '请注意区分目录下文件后缀.xls大小写 If Dir(FilePath, 16) = Empty Then Set WBookOther = Workbooks.Open(MyFile) Application.ScreenUpdating = False ActiveWorkbook.SaveAs Filename:=FilePath, FileFor***t:=xlOpenXMLWorkbook, CreateBackup:=False WBookOther.Close SaveChanges:=False '解决不能close 文件问题 Application.ScreenUpdating = True End If End If NextEnd SubSub zdir(p) '访问当前文件夹下所有子文件夹及文件 Set fs = CreateObject("scripting.filesystemobject") For Each f In fs.GetFolder(p).Files If f <> ThisWorkbook.FullName Then count = count + 1: iFile(count) = f Next For Each m In fs.GetFolder(p).SubFolders zdir m NextEnd Sub
convert-to-xlsx . xl***的VBA码内容
Sub xls2xlsx()Dim FilePath, MyFile, iPath, Name, OutPath As StringiPath = ThisWorkbook.PathOutPath = Dir(iPath & "xlsx", vbDirectory)If OutPath = "" Then MkDir (iPath & "xlsx")End IfMyFile = Dir(iPath & "*.xls")If MyFile <> "" ThenDo On Error Resume Next If MyFile = ThisWorkbook.Name Then MyFile = Dir Workbooks.Open (iPath & "" & MyFile) MyFile = Replace(MyFile, ".xls", ".xlsx") Name = "" & MyFile FilePath = iPath & "xlsx" & Name Application.ScreenUpdating = False ActiveWorkbook.SaveAs Filename:=FilePath, FileFor***t:=xlOpenXMLWorkbook, CreateBackup:=False Workbooks(MyFile).Close True Application.ScreenUpdating = True MyFile = DirLoop While MyFile <> ""End IfEnd Sub
后来有同学问了一些问题,但是代码最后执行的时候就不行了。
我们先来看看正常效果。首先会弹出一个对话框,然后运行。
问题的原因是:
请注意后缀【区分大小写。XLS或者。正在使用Excel的xls]。如果后缀不区分大小写,代码将不会被执行,或者在执行后没有任何效果。
针对这种情况,只需将代码中后缀名称的大小写改为与文件夹中文件的后缀相同即可。
也可以使用软件“Mop Renamer”批量将文件后缀改为小写后再操作。
如果您在重复使用过程中遇到任何问题,请在下面留言。
本文来自水中明月投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/563682.html