兰色曾对很多Excel技巧和函数高手说,千万别学宏。因为一旦爱上宏编程,Excel圈里很快就会少了一个技巧或函数高手!Why? 耐心看下去你就会明白。 一、什么是宏? 先举个例子:
完成! 如上,你在Excel中进行的一系列的操作过程,就是一个宏。操作过程(宏)可以是一步也可以是若干步,使用一个Excel命令或多个Excel命令。 宏,我们也可以看成是一个个可以完成特定目标的功能 二、为什么学习宏? Excel提供了很多功能,可以完成各种操作。筛选数据有自动筛选和高级筛选,汇总数据有分类汇总、数据透视表等.......
有难题就需要有解决办法,怎么办,怎么办? 有办法。就是Excel中没有的功能,我们自已添加,也就是我们自已编写可以完成指定功能的宏。就象Excel内置功能一样,可以供我们随时使用。 三、怎么编写宏 有一种语言,它的名称叫VBA(visual baisic for application),它是Excel所支持的开发语言,也就是说,我们可以用VBA语言来编写我们需要的功能(宏),除此之外,我们还可以用VBA来编写Excel函数。 四、在哪编写宏 有一个窗口,都叫它VBE编辑器。你可以在工作表标签上右键菜单中点击”查看代码“,就可以打开它。更多的是我们通过”开发工具“选项卡打开这个界面。 需要什么功能,就可以编写什么功能,需要什么函数,就可以编写什么函数,工作中再也没有我们完不成的任务。 还有什么理由可以让我们不向往强大的宏编程(VBA语言),这也可以解释,为什么很多函数高手放弃让人炫晕的Excel数组公式学习,技巧高手放弃繁杂的内置功能研究了。 附:兰色最近写的几段常用VBA代码 1、禁止插入工作表 Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox '本工作簿禁止插入新工作表' Application.DisplayAlerts = False Sh.Delete Application.DisplayAlerts = True End Sub 2、禁止打开Excel文件 Private Sub Workbook_BeforePrint(Cancel As Boolean) MsgBox '此excel文件禁止打印,如需打印请与管理员联系' Cancel = True End Sub 3、在VBA中调用Vlookup和Sumif函数 Sub 调用1() Dim arr, arr1 arr = Range('a2:d6') arr1 = Application.VLookup(Array('B', 'C'), arr, 4, 0) End Sub Sub 调用2() Dim T T = Timer Dim arr arr = Application.SumIf(Range('a2:a10000'), Array('B', 'C', 'G', 'R'), Range('B2:B10000')) MsgBox Timer - T Stop End Sub 4、批量取消工作表隐藏 Sub 取消隐藏() For x = 1 To Sheets.Count If Sheets(x).Name <> '总表' Then Sheets(x).Visible = -1 End If Next x End Sub Sub 隐藏() For x = 1 To Sheets.Count If Sheets(x).Name <> '总表' Then Sheets(x).Visible = 0 End If Next x End Sub 5、拆分表格成单独的Excel文件 Sub 拆分表格() Dim x As Integer Dim wb As Workbook Application.ScreenUpdating = False For x = 2 To 32 Sheets(x).Copy Set wb = ActiveWorkbook With wb .SaveAs ThisWorkbook.Path & '/3月/' & Sheets(x).Name & '.xlsx' .Close True End With Next x Application.ScreenUpdating = True End Sub 6、合并多个Excel文件到一个Excel中 Sub 合并表格() Dim mypath As String Dim f As String Dim ribao As Workbook Application.ScreenUpdating = False mypath = ThisWorkbook.Path & '/3月/' f = Dir(ThisWorkbook.Path & '/3月/*.xlsx') Do Workbooks.Open (mypath & f) With ActiveWorkbook .Sheets(1).Move after:=ThisWorkbook.Sheets(Sheets.Count) End With f = Dir Loop Until Len(f) = 0 Application.ScreenUpdating = True End Su |
|