Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2699|回复: 5

[已解决]save as 问题

[复制链接]
发表于 2015-10-18 10:28 | 显示全部楼层 |阅读模式
请问各位老师,如何将XLSX批量调整为XLS,附件中有代码,但是总是出错,所以来论坛请老师帮忙
各位老师  周末愉快
最佳答案
2015-10-18 11:12
  1. Sub xqoa2()    '如有疑问,可询OFFICE之家-2群 39212411
  2.     Dim Arr(1 To 10000), myPath$, myFile$, AK As Workbook, i As Integer, j&
  3.     Set ShApp = CreateObject("Shell.Application")
  4.     '数据区文件夹上层文件夹中存在不能识别的符号也会出错,比如xlsx?xls文件夹,所以我把数据区单独移到外面常规的文件夹下,就正确了。
  5.     Set Path1 = ShApp.BrowseForFolder(0, "请选择文件夹", 0, 0)
  6.     If Path1 Is Nothing Then Exit Sub
  7.     myPath = Path1.items.Item.Path & ""
  8.     myFile = Dir(myPath & "*.xlsx")    '原来这里多一个/符号,导致错误。
  9.     '    On Error Resume Next
  10.     Application.DisplayAlerts = False    '表示禁止显示提示和警告消息
  11.     Do While myFile <> ""
  12.         If myFile Like "*.xlsx" Then
  13.             i = i + 1
  14.             Arr(i) = myPath & myFile
  15.         End If
  16.         myFile = Dir
  17.     Loop
  18.     If i Then
  19.         Application.ScreenUpdating = True
  20.         For j = 1 To i
  21.             Workbooks.Open Arr(j)
  22.             ActiveWorkbook.SaveAs Filename:=Left(Arr(j), Len(Arr(j)) - 1), FileFormat:=xlExcel8, _
  23.                                   Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
  24.                                   CreateBackup:=False
  25.             '此处原来的文件名命名也是错的,因为已经循环完了,就myFile变量中的值变化了
  26.             ActiveWorkbook.Close
  27.         Next j
  28.         Application.ScreenUpdating = False
  29.         MsgBox "全部转换完毕,共转换文件 " & i & "个"
  30.     End If
  31.     Erase Arr
  32.     Application.DisplayAlerts = True    '表示显示提示和警告消息
  33. End Sub
复制代码

xlsx转xls.rar

22.84 KB, 下载次数: 8

发表于 2015-10-18 11:12 | 显示全部楼层    本楼为最佳答案   
  1. Sub xqoa2()    '如有疑问,可询OFFICE之家-2群 39212411
  2.     Dim Arr(1 To 10000), myPath$, myFile$, AK As Workbook, i As Integer, j&
  3.     Set ShApp = CreateObject("Shell.Application")
  4.     '数据区文件夹上层文件夹中存在不能识别的符号也会出错,比如xlsx?xls文件夹,所以我把数据区单独移到外面常规的文件夹下,就正确了。
  5.     Set Path1 = ShApp.BrowseForFolder(0, "请选择文件夹", 0, 0)
  6.     If Path1 Is Nothing Then Exit Sub
  7.     myPath = Path1.items.Item.Path & ""
  8.     myFile = Dir(myPath & "*.xlsx")    '原来这里多一个/符号,导致错误。
  9.     '    On Error Resume Next
  10.     Application.DisplayAlerts = False    '表示禁止显示提示和警告消息
  11.     Do While myFile <> ""
  12.         If myFile Like "*.xlsx" Then
  13.             i = i + 1
  14.             Arr(i) = myPath & myFile
  15.         End If
  16.         myFile = Dir
  17.     Loop
  18.     If i Then
  19.         Application.ScreenUpdating = True
  20.         For j = 1 To i
  21.             Workbooks.Open Arr(j)
  22.             ActiveWorkbook.SaveAs Filename:=Left(Arr(j), Len(Arr(j)) - 1), FileFormat:=xlExcel8, _
  23.                                   Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
  24.                                   CreateBackup:=False
  25.             '此处原来的文件名命名也是错的,因为已经循环完了,就myFile变量中的值变化了
  26.             ActiveWorkbook.Close
  27.         Next j
  28.         Application.ScreenUpdating = False
  29.         MsgBox "全部转换完毕,共转换文件 " & i & "个"
  30.     End If
  31.     Erase Arr
  32.     Application.DisplayAlerts = True    '表示显示提示和警告消息
  33. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
tzjx200521 + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 2015-10-18 11:22 | 显示全部楼层
Sub xqoa2() '不知道怎么修改代码,请老师修改
    Dim Arr(1 To 10000), myPath$, myFile$, AK As Workbook, i As Integer, j&
    Set ShApp = CreateObject("Shell.Application")
    Set Path1 = ShApp.BrowseForFolder(0, "请选择文件夹", 0, 0)
    If Path1 Is Nothing Then Exit Sub
    myPath = Path1.items.Item.Path & "\"
    myFile = Dir(myPath & "\*.xlsx")
    On Error Resume Next
    Do While myFile <> ""
        If myFile Like "*.xlsx" Then
           i = i + 1
           Arr(i) = myPath & myFile
        End If
        myFile = Dir
    Loop
    If i Then
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        myPath = ThisWorkbook.Path & "\结果\"
        
        For j = 1 To i
        myFile = Split(Arr(j), "\")(UBound(Split(Arr(j), "\")))
            Workbooks.Open Arr(j)
            ActiveWorkbook.SaveAs Filename:= _
            myPath & Left(myFile, Len(myFile) - 1), FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
            ActiveWorkbook.Close
        Next j
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
        MsgBox "全部转换完毕,共转换文件 " & i & "个"
    End If
    Erase Arr
End Sub

XLSX转xls.rar

20 Bytes, 下载次数: 8

回复

使用道具 举报

 楼主| 发表于 2015-10-18 16:33 | 显示全部楼层
hysys32 发表于 2015-10-18 11:22
Sub xqoa2() '不知道怎么修改代码,请老师修改
    Dim Arr(1 To 10000), myPath$, myFile$, AK As Workbo ...

myFile = Split(Arr(j), "\")(UBound(Split(Arr(j), "\")))    是什么意思?
回复

使用道具 举报

发表于 2015-10-18 20:36 | 显示全部楼层
sparkguo 发表于 2015-10-18 16:33
myFile = Split(Arr(j), "\")(UBound(Split(Arr(j), "\")))    是什么意思?

获取工作表的名称
回复

使用道具 举报

发表于 2015-10-18 20:37 | 显示全部楼层
获取工作表的名称
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 23:34 , Processed in 0.265435 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表