VBA入门

  • Post author:
  • Post category:其他



该教程适用于有一点编程基础或了解面对对象编程(OOP)的同学观看学习的

一、简介

一种最简单的宏操作就是录制宏,网上教程很多也很详实这里就不累述了。

基础概念介绍

1.VBA代码:VBA的代码组成了VBA程序。

2.过程:用VBA代码把完成一个任务的所有操作保存起来就是一个VBA过程。

3.模块:是保存过程的地方,一个模块可以有多个过程。

4.对象:就是代码操作和控制的东西。

5.对象的属性:属性是对象包含的内容和特点。例:一辆车是一个对象,那么车的颜色就是其属性。

6.对象的方法:方法是指在对象上执行某个操作。例:一辆车是一个对象,那么启动车就是其方法。

打开VBA编辑器的方法

1.按【Alt+F11】

2.点击【开发工具】-【Visual Basic】

3.点击“工作表标签”-“查看代码”

4.在ActiveX控件点左键-“制定宏“,然后选择相应的宏名进行编辑

VBA编辑界面的窗口介绍

//ToDo

编写VBA之前的操作

1.添加模块:

-点击【插入】-【模块】

-在“资源管理器窗口”中点击左键-【插入】-【模块】

2.添加过程:

-在选择相应窗口后点击【插入】-【过程】

-手动输入

Public Sub subname()

End Sub

3.一个完整的VBA sub过程

Public Sub subname()
    MsgBox "hello word!"
End Sub

二、编程规则

语法

1.EXCEl的数据类型:日期值、数值、文本、逻辑值、错误值

2.VAB的数据类型:布尔型、整数型、小数型、字符串型、日期型、对象型,变体型、用户自定义类型(其中对象型需要多多了解),可以了解VBA为弱类型语言

3.声明变量:Dim

变量名

As

数据类型

,可以定义不同的作用域(Public、Private、Static),Option Explicit加上这段代码可以强制声明所有变量

4.给数据类型的变量赋值:[Let]

变量名

=

要存的数据

(中括号的关键值可以省略)

5.给对象类型的变量赋值:set

变量名

=

要存储的对象名称

Set sht = ActiveSheet

6.可同时生成多个变量

7.声明常变量

Const p As Single = 3.14

8.声明数组:Dim

数组名

(a to b) As

数据类型

,可以声明多维多维数组

9.可使用变量类型声明符定义变量类型:Dim Str As String 相当于 Dim Str$

10.声明变量时不指定变量类型那么这个变量就是变体形

!对象的相关概念

1.对象就是用代码操作和控制的东西

2.对象的层次结构:程序(Application)->工作簿(Workbooks)->工作表(Worksheets)->单元格(Cells/Range)

3.集合就是多个同类型的对象。例:Workbooks就是多个Workbook的集合

4.对象和属性是相对而言的,一个对象的属性也可以是另一个对象

5.在编辑器中按【Ctrl+J】弹出的列表中带绿色图标的项是方法

运算符

//ToDo

VBA的内置函数

1.获取帮助点击【帮助】-【Microsoft visual basic for Application】

2.在“代码窗口”键入“vba.”会弹出函数列表

控制语句

1.条件语句

If x<1 Then
    MsgBox "x<1"
ElseIf x>0.5 Then
    MsgBox "x>0.5"
Else 
    MsgBox "x<0.5 or x>1"
End If

2.Select Case语句

Select Case **x**
    Case Is x<1
        MsgBox "x<1"
    Case Is x>0.5
        MsgBox "x>0.5"
    Case Else
        MsgBOx "x<0.5 or x>1"
End Select  

3.for循环

Dim i As Single
    For i = 1 To 10 Step 1
    MsgBox i
    If i = 5 Then
        **Exit For**
    End If
    Next i

4.Do While 循环

Dim i As Single
    i = 1
    Do While i < 5
        MsgBox i
        i = i + 1
        If i = 4 Then
            **Exit Do**
        End If
    Loop
    '当死循环时按【Ctrl + break】
    '还有个类似的Do Until

5.For Each 循环

    Dim arr() As Variant, i As Variant
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    For Each i In arr()
        MsgBox i
    If i = 5 Then
        **Exit For**
    End If

6.GoTo语句

//ToDo

7.With语句

    With Object
    .AttributeA = a
    .AttributeB = b
    .action()
    End With

在过程中执行过程

1.输入过程名与参数

2.输入”Call”+过程名与参数

3.输入”Application.Run”+”过程名与参数”

4.过程的作用域:如果一个过程被声明为私有过程,那么只有这个模块的过程能调用它;只有声明为公共过程才能在其他模块调用

在VBA中自定义一个函数在EXCEl中使用

1.点击【插入】-【过程】-【添加过程】-【函数】

2.手动输入

Public Function row()
    row = ActiveCells.row'这是函数体,必须要赋值给函数名
End Function

3.在vba中也能用自定义函数

4.可以给函数设置参数

Public Function rowss(c As Variant)
    Application.Volatile True '设置易失性,这样按【F9】才会刷新
    rowss = c.Interior.Color
End Function

三、常用对象

这里介绍常用的对象,这些对象会了就能胜任大部分的VBA操作!!!

-常用的对象有

1.Application:代表EXCEl应用程序

2.Workbook:代表EXCEl的工作簿

3.Worksheet:代表EXCEl的工作表

4.Cells/Range:代表EXCEl的单元格

Application

Option Explicit
Public Sub template()
    Cells.clearcontents '清除数据
    Application.ScreenUpdating = False '关闭屏幕更新
    Application.DisplayAlerts = False '取消显示警告对话框
    Application.EnableEvents = False '禁用事件
    Application.WorksheetFuncion.CountIf(Range("A1:B50",">1000") '调用EXCEl中的函数
    Application.EnableEvents = True '开启事件
    Application.DisplayAlerts = True '开启显示警告对话框
    Application.ScreenUpdating = True '开启屏幕更新
    '还可以修改程序中的各个区域。例如【状态栏】、【编辑栏】、【行标】、【列标】等等
    'Application常用的属性:
    'ActiveCell\ActiveChart\ActiveSheet\ActiveWindow
    'ActiveWorkbook\Charts\Selection\Sheets\Worksheets\Workbooks
End Sub

Workbook

Workbook对象是Workbooks集合中的一个成员:就像英语中的可数名词,在VBA中,Workbook代表一个工作簿,加上s后的Workbooks标识当前打开的所有工作簿,即工作簿集合。

1.引用指定的工作簿

-WorkBooks.item(3)/WorkBooks(3)

-Workbooks(“workbooksName”)

-注意点:

-如果是新建的工作簿,在不保存的情况下,引用时不能加扩展名

-如果是已经存在的文件,当系统设置显示文件的扩展名时,使用工作簿名称

引用工作簿时必须带上扩展名

2.一些常用属性

    With Workbooks(非参数检验总结.xlsx)
    .Name = a
    .Path = b
    .FullName = c
    End With

3.创建工作簿

Workbooks.Add "C:\Users\xiebin\Desktop\非参数检验总结.xlsx" '用非参数检验总结为模板创建一个工作簿,最好使用绝对路径
 Workbooks.Add Template:=xlWBATWorksheet '创建一个空的普通工作表

4.打开工作簿

Workbooks.Open Filename:= "C:\Users\xiebin\Desktop\非参数检验总结.xlsx" '打开“非参数检验总结.xlsx”工作簿
Workbooks.Open "C:\Users\xiebin\Desktop\非参数检验总结.xlsx" '简略写法

5.激活工作簿

虽然可以同时打开多个工作簿文件,但同一时间只能有一个工作簿是活动的。如果想让不活动的工作簿变为活动工作簿,可以用Workbooks对象的Activate方法激活它。

Workbooks("Book1").Activate '激活工作簿“Book1”

6.保存工作簿

ThisWorkbook.Save '保存已经存在的工作簿
ThisWorkbook.SaveAs Filename:= "D:\template.xlsm" '将工作簿到D盘,并且会关闭原工作簿打开另存的工作簿
ThisWorkbook.SaveCopyAs Filename="D:\template.xlxs" '另存了工作簿后保留原工作簿不打开新的工作簿

7.关闭工作簿

Workbooks("Book1").Close '关闭Book1工作簿
Workbooks("Book1").Close savechanges:=True '关闭工作簿并保存修改

Worksheet

1.引用工作表

Worksheets.Item(index) '使用索引
Worksheets(index) '使用索引的简略方法
Worksheets("worksheetsname") '使用工作表的在EXCEl中的标签名称或在【工程资源管理器】/【属性窗口】中的代码名称

2.添加工作表

Worksheets.Add '在活动工作表中新建一张工作表
Worksheets.Add before:=Worksheets(1) '在第一张工作表前插入一张新的工作表
Worksheets.Add after:=Worksheets(2) '在第二张工作后插入一张心得工作表
Worksheets.Add after:=Worksheets(1),Count:=3 '在第一张工作表后插入三张工作表

3.对新建的工作表命名

ActiveSheet.Name = "Zing" '新建的工作表总是活动工作表

4.删除工作表

Worksheets("sheet1").Delete '删除“sheet1”工作表名称

5.激活工作表

Worksheets(1).Activate '隐藏时会报错
Worksheets(1).Select

6.复制工作表

Worksheets("sheet1").Copy before:=Worksheets("sheet2") '复制工作表“sheet1”到“sheet2”工作表前面
Worksheets("sheet1").Copy after:=Worksheets("sheet2") '复制工作表“sheet1”到“sheet2”工作表后面
Worksheets("sheet1").Copy '复制“sheet1”工作表到新的工作簿中

7.移动工作簿:用法与复制相似

8.隐藏工作表:使用Visible属性

9.获取工作表数目:使用Count属性

10.sheets只是Worksheets中的一种,EXCEl中有很多类型的工作表

!Range

1.引用单元格的方法

Range("A1")   '用字符串引用单个单元格
Range("A1:B20") '引用一个单元格区域
Range("A1:A10,A4:E6,C3:D9") '引用不连续的区域
Range("A1:A10 A4:E6 C3:D9") '引用公共区域
Range("CellName") '引用已定义名称的单元格或单元格区域
Cells(1,1) 'Cells只能引用单元格不能引用区域,前行后列
Cells(1,"A") '同上
Cells(2) '用单元格的索引来引用
Range("B3:F9").Cells(2,3) '引用B3:F9区域的第二行第三列
Range(Cells(1,1),Cells(2,2)) '可以用Cells做Range的参数
Range("A1","B2") '效果同上
Range(Range("A1"),Range("B2")) '效果同上
Rows(3) '引用第三行
Rows("3:5") '引用第三行到第五行
Columns("F:G") '引用F到G列
Columns(6) '引用第六列

2.可以使用Application的Union方法将多个不连续的单元格区域黏在一起进行操作

3.可以使用Range的Offset属性对单元格进行偏移

4.可以使用Range的Resize属性扩大或缩小单元格的区域

5.Range的UsedRange属性可以引用当前工作表已使用的单元格包围的区域

6.Range的CurrentRegion属性得以引用当前选中单元格的当前区域,就是不包括空行与空列

7.Range的End属性可以返回当前单元格某个方向结尾处的单元格

8.其他简单的属性

-Value:获取单元格中的值

-Count:计算选中单元格区域的单元格个数

-Address:返回单元格的地址,可以选择返回的形式

-Activate/Select:功能都是选中单元格

-各种清除单元格:Clear/ClearComments/ClearContents/ClearFormats

-Copy:复制单元格

-Cut:剪切单元格

-Delete:删除单元格

9.还可以设置单元格的格式:可以先通过录制宏,来查看相关代码


在VBA编辑器中可以使用【F1】来获取帮助

会了以上的内容,就能对EXCEl做一些批量操作了可以满足大部分工作需求。



版权声明:本文为xiebin6163原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。