使用VBA批量轉換Excel格式,由.xls轉換成.xlsx


問題分析:

  Excel2007以前的格式是.xls,之后的格式是.xlsx。打開單獨的一個Excel文檔,使用“另存為”功能,可以很輕松的轉換格式。但是面對幾百個Excel表這樣就太累了,搜索很久,也沒發現一個工具可以直接批量進行格式轉換。

  最終發現可以使用VBA來實現批量轉換Excel格式的功能。大家不要被嚇到,VBA我也不懂,代碼是從別人那里搞到的,現在也只是知道了怎么使用,但這足夠解決問題了

VBA介紹:
  1、VBA是一種編程語言,它依托於Office軟件,不能獨立的運行,通過VBA可以實現各種Office軟件操作的自動化。
  2、Visual Basic for Applications(VBA)是Visual Basic的一種宏語言,主要能用來擴展Windows的應用程式功能。使用Excel的VBA開發的Excel文檔,在Excel中運行時需要開啟Excel的宏功能,否則此文檔的VBA自動化功能將被完全屏蔽,文檔的功能無法實現。

執行條件:
  1、Office2007及以上版本的Excel
  2、Excel啟用宏

工具下載:
  可以自己新建Excel,編寫VBA代碼,代碼在后面。也可以使用我提供的已經寫好的兩個,以下是百度網盤中的鏈接:
    《xls2xlsx.xlsm
    鏈接:http://pan.baidu.com/s/1mit3FGc 密碼:s57a
    《Convert2xlsx.xlsm
    鏈接:http://pan.baidu.com/s/1sluFttb 密碼pguv

  分享的內容無法訪問了,百度網盤有點小坑啊,不過代碼就是下邊貼出來的那些,手動粘貼吧...

功能介紹:
  先介紹這兩個工具功能,大家可以根據需要下載。
  《xls2xlsx.xlsm》會在所在文件夾目錄中、包括子目錄中,遍歷所有.xls格式的文件,執行“另存為”操作,然后在原文件當前位置另存為一個同名的.xlsx格式的文件。
  比如:執行前xls2xlsx.xlsm所在的文件夾中有3個.xls格式的文件,同時包含一個子文件夾,子文件夾中也有3個.xls格式的文件

         

  執行后,會生成如下文件:

         

  《Convert2xlsx.xlsm》會在所在文件夾目錄中(不包括子目錄),遍歷所有.xls格式的文件,執行“另存為”操作,然后在當前路徑下生成一個文件夾xlsx,這個文件夾中放了所有新生成的文件。
  比如:執行前Convert2xlsx.xlsm所在的文件夾中有3個.xls格式的文件

    

  執行后,會生成如下文件:

        

執行方法:
  1、從上面下載任意一個工具,或者新建一個Excel;
  2、啟用宏操作
  一般情況下,打開Excel的時候,會彈出如下警告

    

  如果彈出了這個警告,直接啟用就可以了;如果沒有出現的話,請參考以下百度經驗啟用宏http://jingyan.baidu.com/article/39810a23e39b9db637fda651.html
  3、編寫執行VBA代碼
  這一步新手肯定是不會的,詳細地圖文介紹就參考百度經驗http://jingyan.baidu.com/article/09ea3ede265e8bc0aede39ba.html,我這里只作簡單的說明:
    (a)在工作表界面按下組合快捷鍵Alt+F11或者右鍵單擊任意一個工作表標簽,在彈出的右鍵快捷菜單單擊“查看代碼”進入VBA編輯環境
    (b)如果是下載的我的工具,可以跳過此步驟;如果是新建的Excel,此時在VBA編輯環境中的“代碼窗口”復制粘貼以下兩個代碼中的一個:
    《xls2xlsx.xlsm》

 1 '***********訪問當前文件夾下所有子文件夾及文件,
 2 Dim iFile(1 To 100000) As String
 3 Dim count As Integer
 4 
 5 Sub xls2xlsx()
 6     iPath = ThisWorkbook.Path
 7     On Error Resume Next
 8     count = 0
 9     zdir iPath
10     For i = 1 To count
11         If iFile(i) Like "*.xls" And iFile(i) <> ThisWorkbook.FullName Then
12             MyFile = iFile(i)
13             FilePath = Replace(MyFile, ".xls", ".xlsx")
14             If Dir(FilePath, 16) = Empty Then
15                 Set WBookOther = Workbooks.Open(MyFile)
16                 Application.ScreenUpdating = False
17                 ActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
18                 WBookOther.Close SaveChanges:=False      '解決不能close 文件問題
19                 Application.ScreenUpdating = True
20             End If
21         End If
22     Next
23 End Sub
24 
25 Sub zdir(p)       '訪問當前文件夾下所有子文件夾及文件
26   Set fs = CreateObject("scripting.filesystemobject")
27   For Each f In fs.GetFolder(p).Files
28     If f <> ThisWorkbook.FullName Then count = count + 1: iFile(count) = f
29   Next
30   For Each m In fs.GetFolder(p).SubFolders
31       zdir m
32   Next
33 End Sub

 

    《Convert2xlsx.xlsm》

 1 Sub xls2xlsx()
 2 Dim FilePath, MyFile, iPath, Name, OutPath As String
 3 iPath = ThisWorkbook.Path
 4 OutPath = Dir(iPath & "\xlsx", vbDirectory)
 5 If OutPath = "" Then
 6     MkDir (iPath & "\xlsx")
 7 End If
 8 MyFile = Dir(iPath & "\*.xls")
 9 
10 If MyFile <> "" Then
11 Do
12     On Error Resume Next
13     If MyFile = ThisWorkbook.Name Then MyFile = Dir
14     Workbooks.Open (iPath & "\" & MyFile)
15     MyFile = Replace(MyFile, ".xls", ".xlsx")
16     Name = "\" & MyFile
17     FilePath = iPath & "\xlsx" & Name
18     Application.ScreenUpdating = False
19     ActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
20     Workbooks(MyFile).Close True
21     Application.ScreenUpdating = True
22     MyFile = Dir
23 Loop While MyFile <> ""
24 End If
25 End Sub

 

    (c)按下F5快捷鍵執行這段代碼或者在菜單中單擊“運行子過程/用戶窗體”命令

  PS:需要說明的是,在執行過程中,不要去做其他的事情,不然可能會中斷程序的運行

 


 

  后來有同學提了些問題,最后執行代碼的時候,並沒有達到效果。先來看下正常的效果,會先彈出一個對話框,然后運行

 

  出問題的原因是:在文件夾中的 .xls的后綴是大寫的。這導致了代碼不能執行,不過這種情況稍微修改下就可以了

 

  我還試了一下,如果同目錄下 .xls 和 .xlsx同時存在,也執行不了……

 

  原創文章,歡迎轉載,轉載請注明出處!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM