2.4. Excel VBA

看此部分内容之前,关于VBA的基础知识,以及word VBA的相关知识,可参考第 2.3 节 “Word VBA”

2.4.1. Excel VBA中基本的名词和概念

此处介绍一些Excel中的最基本的概念,搞清楚这些概念,是继续深入学习Excel的基础。

Excel中,我们已经知道的是,从概念上来说,从大到小是:

Excel文件 ⇒ Excel文件中页表sheet ⇒ sheet中的行和列 ⇒ 行列交叉点所对应的单元格

这些名词和概念,对应到Excel VBA中就是:

Workbook ⇒ Worksheet ⇒ Column, Row ⇒ Cell

并且,每个概念,都对应着一个该单词的复数形式,表示的是对应的一组的该单位,

如:Workbooks表示一组,很多个当前已经打开的Excel文件等。

下面稍微详细地介绍一下各自的含义和用法。

  1. Workbook

    workbook属于workbooks,workbooks是当前打开的所有的workbook的集合(总称)。

    对于想要获得单个的workbook,有这些方式:

    • Workbooks.Item(N)
    • Workbooks(N)
    • Workbooks("excel_file_name.xlsx")

    Workbook所具有的一些常见函数有:

    • Workbook.Open
    • Workbook.Add
    • Workbook.Save
    • Workbook.SaveAs

    对于其更多的函数和属性,细心的人,自然会想到利用前面提到的自学方法,去更加详细的学习了解的。以后对此类提示,就不再多提醒了。

  2. Worksheet

    worksheet即我们常说的Excel中sheet。

    worksheet属于worksheets。

    Excel软件,创建一个Excel文件的时候,默认会自动创建3个sheet,对应的就是该workbook的worksheets,包含了3个worksheet。

    对应获得当前的worksheet的方式:

    • Workbooks.Item(1).Sheets.Item(N)
    • Workbooks.Item(1).Sheets.Item("sheet_name")
  3. Column

    对应的概念很好理解,不多解释。

    对应每个列,都有一个自己的名字,比如第三列,名字一般是"C"。

    获得第三列的方式有:

    • Columns(3)
    • Columns("C")

    获得3到5列,可以:

    • Columns("C:E")
    • Range("C:E")

    选中1, 5,7,8,9列:

    Range("A:A, E:E, G:G, H:H,I:I").Select

    设置宽度:

    Columns("C").ColumnWidth = 4.5

    大小自动适应:

    Selection.Columns.AutoFit

    隐藏显示某列用对应的:

    Columns("C").hidden=True
  4. Row

    行的操作,非常类似于列的操作:

    选中2到6行:

    Rows("2:6").Select

    选中第一行:

    Rows(1).Select

    选中5,7,8行:

    Range("5:5, 7:7,8:8").Select

    设置行高:

    Rows(6).RowHeight = 2.5

    选中某6行,将其隐藏:

    Rows("6:6").Select
    Selection.EntireRow.Hidden = True
                        

    [提示] 可以通过行Row或列Column的名称来操作行或列

    另外,如果单独对于某列,比如第三列,默认名字,是"C",可以同选中该列,鼠标移动到左上角那个输入框中,鼠标会自动显示"Name Box",此时你可以在里面输入你想要的名字,比如"Col3",然后接下来的所有的对第三列的操作和引用,之前是通过Columns("C")来获得的,现在就可以通过

    Columns("Col3")

    来操作了。

    即Columns("XXX")中的XXX是对应的列的名字。

    对于行的操作,也是同样适用的。

    即可以先去对某行去命名,然后就可以通过对该名字来引用到该行了。

  5. Cell

    行和列交叉点,对应的就是单元格cell。

    下面是各种操作:

    第四列第六行:

    Range("D6")

    设置单元格的一些属性:

    Range("B3″).Font.Name = "Cambria" ‘也可以设置为宋体,微软雅黑
    Range("B3″).Font.Bold = True
                        

    选中从D2到H6的整块的单元格:

    Range("B2:H6")

    用同样的方式去选中某个单个的单元格:

    Range("D4:D4")

    选中两块单元格:

    Range("B2:C5,EC4:G8").Select

    选中部分重叠的两块单元格:

    Range("B2:C5, C4:G8").Select

    取消显示网格线:

    ActiveWindow.DisplayGridlines = False

2.4.2. Excel VBA中的一些基本操作

  1. 如何添加注释

    VBA中的注释,是以单引号"'"开头的,其后内容,都视为注释内容。

    另外一种,也可以通过关键字REM或Rem加上个空格,之后的内容,也会被识别为注释。

    比如:

    REM this is a excel maro
    ' this is a excel maro
                    
  2. 如何调试

    简单的说,有两种方式:

    1. Msgbox

      一是直接调用Msgbox去弹出对话框打印信息。

      比如:

      MsgBox "Currently opening Excel file is: " & ActiveWorkbook.Name

      其中,字符串链接/拼接,用&符号。

    2. log文件

      二是新建一个log文件,将调试或打印信息输出到log文件中去。

      关于如何创建文件,可参考:在VBA中创建(log)文件的两种方法

  3. 获得当前的Excel文件所在路径

    类似于Word VBA中的ActiveDocument,Excel中是ActiveWorkbook

    所以获得当前打开的Excel的文件路径是:

    ActiveWorkbook.Path

    与此相关的是:

    ActiveWorkbook.FullName = ActiveWorkbook.Path + '' + ActiveWorkbook.Name

    更多相关的内容,请自己尝试:

    • MsgBox ActiveWorkbook.Name
    • MsgBox ActiveWorkbook.FullName
    • MsgBox ActiveWorkbook.FullNameURLEncoded
    • MsgBox ActiveWorkbook.Path
  4. 一些通用的属性和方法(函数)

    对于选中当前的内容,比如workbook,sheet等,可以通过.Select来选中,

    比如:

    Sheets("sheet_name").Select

    对于当前的内容的名字,对应的是.Name属性,比如:

    Sheets("sheet_name").Name

    很多内容,都有move的功能,详细用法请自己探索。

    新增一个新的内容,比如workbook,sheet等,都可以用Add方法。

2.4.3. Excel VBA更多的学习资料

2.4.4. 授人鱼不如授人以渔

此部分内容,其实在之前第 2.3 节 “Word VBA”中,已有提到,此处再次强调一下。

在学习VBA(和任何类似知识)的过程中,学会利用系统已有资源。

即,在VBA中,可以供我们利用的资源,至少有这些:

  1. VBA中的对象浏览器(Object Browser)

    可以通过在写VBA代码的过程中,对于任何你不太懂,想要了解更多细节的内容,选中该内容,比如我想要了解workbook,那就选中workbook,然后右键⇒Object Browser,即可在Object Browser中查找到你所要的内容,其中可以直观快速地看到对应目标所具有的变量成员和函数等,很是方便。

  2. 内置的Help

    选中想要查询的内容,然后按F1,VBA即可调用Help帮助系统,可以查询到更多的细节和实例用法。

    例如,我知道了workbook是对应于当前Excel文件,想要了解workbook有哪些属性和方法,

    那么可以去F1的Help中输入workbook,然后搜索到很多条目,其中第一条就是:

    Workbook Object Members

    Article Represents a Microsoft Excel workbook. Methods Name Description AcceptAllChanges Accepts all changes in the specified shared workbook. Activate Activates the fi...

    然后点击进入后,就可以看到"Workbook Object Members"的页面,其中有三部分:Methods,Properties,Events

    里面有你想要的所有的成员和函数等。

    比如,表示当前Excel的文件名的.Name的属性,文件全名(包括路径和文件名)的.FullName的属性等。

    然后你也可以通过Msgbox去自己尝试打印出来看看,都是什么值:

    MsgBox ActiveWorkbook.Name
    MsgBox ActiveWorkbook.FullName
                    

    这样的话,你就可以可以通过自学的方式,去搞懂很多内容了。

  3. 通过录制宏去照葫芦画瓢

    如果还是不会操作,那么可以去通过VBA提供的录制宏的功能,来实现搞懂VBA系统是如何将你对应的操作转化为对应的VBA代码的,然后你就可以照葫芦画瓢了。

    比如,我打开两个Excel文件,将其中一个Excel中的某个单元格的内容,选中后复制,然后切换到另外一个Excel文件,选中某个单元格,按了Ctrl+V粘贴,然后按了Ctrl+S来保存,如此这段操作,通过录制宏,得到如下代码:

    Sub Macro3()
    ‘
    ‘ Macro3 Macro
    '
        Range("B3″).Select
        Selection.Copy
        Windows("EWR_tracking_list_enabledMacro.xlsm").Activate
        Range("O152″).Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ActiveWorkbook.Save
        Windows("ROSH1.xlsx").Activate 
    End Sub
                    

    所以,如果你想要实现类似的操作,至少是复制粘贴等动作,就可以参考上述代码了。

    [提示] Excel中如何录制宏

    View⇒Macro⇒Record Macro,跳出对话框让你输入要录制的话宏的名称,随便起个名字,然后你就可以去随心所欲地操作了,

    操作完成后,再去View⇒Macro⇒Stop Macro,即可。

    此时,再去View⇒Macro⇒View Macro去查看你刚录制的宏,即可看到对应的VBA代码。

通过上述方法,基本上大部分内容,都可以自己自学而搞懂。

有人会问,那么我最开始使用VBA的话,连一些基本概念和其他一些常见操作都不会,连对应的关键字都不知道,那么又如何去查询对应关键字呢?

答案是,学会利用baidu和google,可以查询你要实现的操作,往往都会找到相关内容的,即使没有找到直接的答案,但是也可以找到对应的相关的关键字,然后就可以通过上述Object Browser和F1的Help,找到更多的细节的用法,如果足够细心和能够举一反三,相信很多的内容,都可以自己发掘并实现的。

如果还是没搞懂,普通的操作,也是可以通过录制宏的方式,然后去实际操作,最后查看所录制的宏的代码中,是如何操作的,你就可以照葫芦画瓢了。