最近完成一项任务用到了一段VBA代码,觉得很实用,今天小编分享给大家,因为以前小编很少写VBA相关文章,这次写不知道大家会有什么样的反馈,如果大家喜欢的话,小编会继续开发更多VBA教程。
小编的主业是搞企业管理系统开发的,经常有在职的朋友想跟着学软件开发,小编一般优先推荐VBA,因为VBA也是一种编程语言,相对于其他编程语言,不仅开发环境容易安装,语法、代码也容易理解,是一种入门非常快的编程语言。常言道,师傅领进门修行在个人。软件编程也一样,只要入了门,一般都可以上岗就业了。
今天要讲的案例是如何将csv文件批量转成xlsx文件。
场景说明
现有数十个csv文件需要导入到数据库,由于导入工具只能接受xlsx格式的文件导入,所以需将csv转成xlsx格式文件,人工可使用Excel打开csv文件然后另存为xlsx格式,但这样做工作量也不小,而且容易出错,尤其是这种重复的工作。所以希望有一个工具可批量将csv文件转成xlsx文件。
方案设计
“将csv文件批量转成xlsx文件”方案可能有很多,比如用C#开发小工具、用Python开发,或者用VBA宏开发。本例中,使用VBA宏开发,在Excel中,运行宏,选择要转换的csv文件,然后执行转换。
功能要求
小编认为写代码比较容易,因为大部分代码都是功能型代码,只要搞清楚了功能需求和处理逻辑,写代码都是顺其自然的事情,不知道的代码可以百度,几乎没有找不到的代码。以下是转换工具的功能要点:
弹出文件夹选择框,选在csv所在的文件夹
在源文件下创建excel文件夹用于保存生成的xlsx文件
如果源文件夹下excel文件不存在则创建
新生成xlsx文件跟原来的文件名一致
循环处理每一个csv文件
转换完成后给出成功提示
开发工具
从开发工具菜单调出Visual Basic开发工具,编写VBA代码
代码详解
定义一个宏方法,宏的名称是CSVToXLSX
Sub CSVToXLSX()’这里将放置功能代码’在VBA中,单引号用于注释’比如当前行就是一段注释,对程序执行没有任何影响End Sub
下图是Excel中调用宏的方法
定义变量,变量名可由字母和数字组成
‘VB语法,定义字符型变量,是csv文件的代号DimfDirAsString’定义一个工作簿,将作为当前工作簿的代号DimwBAsWorkbook’定义一个Sheet表,将作为当前Sheet表的代号DimwSAsWorksheet’定义一个字符型变量,将作为csv源文件夹的代号DimsPathAsString’定义一个字符型变量,将作为xlsx输出文件夹的代号DimfPathAsString’定义一个文件选择对话框变量,将用于文件夹选择DimfdAsFileDialog
选择csv所在文件夹
‘给fd赋值,赋成一个文件夹选择对话框对象Set fd = Application.FileDialog(msoFileDialogFolderPicker)With fd’With语法,相当于fd.Title,设置标题.Title=”请您选择CSV文件夹” If .Show = -1 Then ‘设置csv文件夹sPath=.SelectedItems(1)&”\”‘设置输出文件夹dPath=.SelectedItems(1)&”\Excel\” End IfEndWith
设置xlsx导出文件夹,如果文件夹不存在则创建。
‘判断输出文件夹是否存在,如不存在则创建If Dir(dPath, vbDirectory) = “” ThenMkDir(dPath)’创建输出文件夹End If
循环遍历csv文件夹,并转存文件。
‘从sPath中找到第一个csv文件fDir = Dir(sPath & “\*.csv”, vbNormal) ‘循环处理,当fDir文件名存在时继续处理DoWhile(fDir<>””)’当文件名是.csv格式时才处理IfRight(fDir,4)=”.csv”Then’遇到错误继续处理,容错处理OnErrorResumeNext’打开.csv文件SetwB=Workbooks.Open(sPath&fDir) For Each wS In wB.Sheets’键代码,转换文件,其中使用replace方法将.csv替换成空 wS.SaveAs dPath & Replace(wB.Name, “.csv”, “”) & “.xlsx” _ , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False Next wS wB.Close False ‘关闭工作簿SetwB=Nothing’销毁工作簿 End If fDir = Dir ‘继续处理下一个 On Error GoTo 0Loop’转换成功给出一个对话框提示,通知用户转换完成MsgBox”转换完成”
完整代码如下,如果您看到一下代码跟读小说一样,那么恭喜您,您非常有些代码的天赋。
SubCSVToXLSX() Dim fDir As String Dim wB As Workbook Dim wS As Worksheet Dim sPath As String Dim dPath As String Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFolderPicker) With fd .Title = “请您选择CSV文件夹” If .Show = -1 Then sPath = .SelectedItems(1) & “\” dPath = .SelectedItems(1) & “\Excel\” End If End With If Dir(dPath, vbDirectory) = “” Then MkDir (dPath) End If fDir = Dir(sPath & “\*.csv”, vbNormal) Do While (fDir <> “”) If Right(fDir, 4) = “.csv” Then On Error Resume Next Set wB = Workbooks.Open(sPath & fDir) For Each wS In wB.Sheets wS.SaveAs dPath & Replace(wB.Name, “.csv”, “”) & “.xlsx” _ , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False Next wS wB.Close False Set wB = Nothing End If fDir = Dir On Error GoTo 0 Loop MsgBox “转换完成”End Sub
如有疑问,请给小编留言。