拨丝留其产 / 技巧 / Excel中你学什么都可以,千万别学“宏”!

分享

   

Excel中你学什么都可以,千万别学“宏”!

2016-03-20  拨丝留其产

兰色曾对很多Excel技巧和函数高手说,千万别学宏。因为一旦爱上宏编程,Excel圈里很快就会少了一个技巧或函数高手!Why? 耐心看下去你就会明白。


一、什么是


先举个例子:


Excel有一个任务:在C列值的基础上加上B列的值。

  1. 选取B列并复制

  2. 选取C列右键 - 选择性粘贴 - 加

完成!



如上,你在Excel中进行的一系列的操作过程,就是一个宏。操作过程(宏)可以是一步也可以是若干步,使用一个Excel命令或多个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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>