千万别学VBA(宏),我是认真的!原创2017-02-19兰色幻想■赵志东Excel精英培训Excel精英培训兰色曾对很多Excel技巧和函数高手说,千万别学宏。因为一旦爱上宏编程,Excel圈里很快就会少了一个技巧或函数高手!Why?耐心看下去你就会明白。一、什么是宏?先举个例子:Excel有一个任务:在C列值的基础上加上B列的值。1.选取B列并复制2.选取C列右键-选择性粘贴-加完成!如上,你在Excel中进行的一系列的操作过程,就是一个宏。操作过程(宏)可以是一步也可以是若干步,使用一个Excel命令或多个Excel命令。宏,我们也可以看成是一个个可以完成特定目标的功能二、为什么学习宏?Excel提供了很多功能,可以完成各种操作。筛选数据有自动筛选和高级筛选,汇总数据有分类汇总、数据透视表等但•…还是有Excel无能为力的时候。比如:•批量取消工作表隐藏•批量合作多个工作表或ExceI文件•批量……有难题就需要有解决办法,怎么办,怎么办?有办法。就是Excel中没有的功能,我们自已添加,也就是我们自已编写可以完成指定功能的宏。就象Excel内置功能一样,可以供我们随时使用。三、怎么编写宏有一种语言,它的名称叫VBA(visualbaisicforapplication),它是Excel所支持的开发语言,也就是说,我们可以用VBA语言来编写我们需要的功能(宏),除此之外,我们还可以用VBA来编写Excel函数四、在哪编写宏有一个窗口,都叫它VBE编辑器。你可以在工作表标签上右键菜单中点击”查看代码“,就可以打开它。更多的是我们通过”开发工具“选项卡打开这个界面。需要什么功能,就可以编写什么功能,需要什么函数,就可以编写什么函数,工作中再也没有我们完不成的任务。还有什么理由可以让我们不向往强大的宏编程(VBA语言),这也可以解释,为什么很多函数高手放弃让人炫晕的Excel数组公式学习,技巧高手放弃繁杂的内置功能研究了。附:兰色最近写的几段常用VBA代码1、禁止插入工作表PrivateSubWorkbook_NewSheet(ByValShAsObject)MsgBox"本工作簿禁止插入新工作表"Application.DisplayAlerts=FalseSh.DeleteApplication.DisplayAlerts=TrueEndSub2、禁止打开ExceI文件PrivateSubWorkbook_BeforePrint(CancelAsBoolean)MsgBox"此excel文件禁止打印,如需打印请与管理员联系"CanceI=TrueEndSub3、在VBA中调用Vlookup和Sumif函数Sub调用1()Dimarr,arr1arr=Range("a2:d6")arr1=Application.VLookup(Array("B","C"),arr,4,0)EndSubSub调用2()DimTT=TimerDimarrarr=Application.SumIf(Range("a2:a10000"),Array("B","C","G","R"),Range("B2:B10000"))MsgBoxTimer-TStopEndSub4、批量取消工作表隐藏Sub取消隐藏()Forx=1ToSheets.CountIfSheets(x).Name<>"总表"ThenSheets(x).Visible=-1EndIfNextxEndSubSub隐藏()Forx=1ToSheets.CountIfSheets(x).Name<>"总表"ThenSheets(x).Visible=0EndIfNextxEndSub5、拆分表格成单独的Excel文件Sub拆分表格()DimxAsIntegerDimwbAsWorkbookApplication.ScreenUpdating=FalseForx=2To32Sheets(x).CopySetwb=ActiveWorkbookWithwb.SaveAsThisWorkbook.Path&"/3月/"&Sheets(x).Name&".xlsx".CloseTrueEndWithNextxApplication.ScreenUpdating=TrueEndSub6、合并多个Excel文件到一^个Excel中Sub合并表格()DimmypathAsStringDimfAsStringDimribaoAsWorkbookApplication.ScreenUpdating=Falsemypath=ThisWorkbook.Path&"/3月/"f=Dir(ThisWorkbook.Path&"/3月/*.xlsx")DoWorkbooks.Open(mypath&f)WithActiveWorkbook.Sheets⑴.Moveafter:二ThisWorkbook.Sheets(Sheets.Count)EndWithf=DirLoopUntilLen(f)=0Application.ScreenUpdating=TrueEndSu兰色说:从函数到VBA是,绝大多数Excel高手的必经之路,而且没有回头路。编了半天的数组公式,很轻易的被几句简单的代码秒杀,这是很多人不愿再费脑子深入学函数的原因。但还是有不少对函数感兴趣的用户在研究函数,在他们心中,Excel不再是一种工作必须,而是一种乐趣。如果你是新同学,长按下面二维码-识别图中二维码-关注,就可以每天和兰色一起学Excel了。