上周末,XX给我抱怨:由于计算绩效奖金,把2我的的工资发错了,还被扣了500元。问的原因得知,她每月要处理十来个excel表格,每次都要手动修改里面的值,若是修改了一处,其余地方也要修改,而后还要多处地方核对。致使光这件事情就要消耗三四天,伤神费力。git
我就问她,整个是否是都是机械性重复的工做,若是是的话,彻底能够用电脑来代替。而后我就帮她找工具来优化她的工做,减小出错机会。github
总结:如今目前找到的都是web版的系统,都须要在线部署。没有找到桌面版本,能够当即使用的那种。都不太适合目前的状况。web
实现功能(下载demo):数据库
1 Sub ChangeFileFormat(xltxFolder, xlsxFolder) 2 3 Dim strCurrentFileExt As String 4 Dim strNewFileExt As String 5 Dim objFSO As Object 6 Dim objFolder As Object 7 Dim objFile As Object 8 Dim xlFile As Workbook 9 Dim strNewName As String 10 Dim strXltxFolderPath As String 11 Dim strXlsxFolderPath As String 12 13 Set objFSO = CreateObject("Scripting.FileSystemObject") 14 15 strCurrentFileExt = ".xltx" 16 strNewFileExt = ".xlsx" 17 18 strXltxFolderPath = ThisWorkbook.Path & "\" & xltxFolder & "\" 19 strXlsxFolderPath = ThisWorkbook.Path & "\" & xlsxFolder & "\" 20 21 If Not objFSO.FolderExists(strXltxFolderPath) Then '判断指定文件夹是否存在 22 MsgBox "【模板文件】文件夹不存在" 23 Exit Sub 24 End If 25 26 If Not objFSO.FolderExists(strXlsxFolderPath) Then '判断指定文件夹是否存在 27 fs.CreateFolder strXlsxFolderPath 28 End If 29 30 Set objFolder = objFSO.getfolder(strXltxFolderPath) 31 For Each objFile In objFolder.Files '循环全部的模板文件 32 strNewName = objFile.Name 33 If Right(strNewName, Len(strCurrentFileExt)) = strCurrentFileExt Then 34 Application.AskToUpdateLinks = False '关闭程序询问更新连接提示 35 Application.DisplayAlerts = False 36 ThisWorkbook.UpdateLinks = xlUpdateLinksAlways '更新连接 37 38 Set xlFile = Workbooks.Open(objFile.Path, , True) '读取模板文件 39 For Each sh In xlFile.Sheets '替换文件中的公式 40 sh.UsedRange.Value = sh.UsedRange.Value 41 Next 42 43 strNewName = Replace(strNewName, strCurrentFileExt, strNewFileExt) '替换文件名为新的文件名 44 Select Case strNewFileExt 45 Case ".xlsx" 46 xlFile.SaveAs strXlsxFolderPath & strNewName, XlFileFormat.xlOpenXMLWorkbook '保存为不带宏的excel 47 Case ".xlsm" 48 xlFile.SaveAs strXlsxFolderPath & strNewName, XlFileFormat.xlOpenXMLWorkbookMacroEnabled '保存为带宏的excel 49 End Select 50 xlFile.Close 51 Application.AskToUpdateLinks = True 52 Application.DisplayAlerts = True 53 End If 54 Next objFile 55 56 ClearMemory: 57 strCurrentFileExt = vbNullString 58 strNewFileExt = vbNullString 59 Set objFSO = Nothing 60 Set objFolder = Nothing 61 Set objFile = Nothing 62 Set xlFile = Nothing 63 strNewName = vbNullString 64 strFolderPath = vbNullString 65 End Sub
在这个过程当中,考虑的时候,使用到了:模块,数据惟一性,避免交叉引用,这些开发中的经验。服务器
其实我以为,整个过程当中,VBA的编写占据了我最多的时间。查资料,找文档。(百度就是个大坑!!!)函数
不熟悉Excel函数致使,当我写完一个宏的时候,发现VLOOKUP已经早就实现这个功能了。工具