vba代码大全入门,VBA经典代码应用大全

http://www.itjxue.com  2023-01-21 10:40  来源:未知  点击次数: 

Excel VBA基础入门

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,更确切地讲,它是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案。

掌握了VBA,可以发挥以下作用:

1.规范用户的操作,控制用户的操作行为;

2.操作界面人性化,方便用户的操作;

3.多个步骤的手工操作通过执行VBA代码可以迅速的实现;

4.实现一些VB无法实现的功能;

5.用VBA制做EXCEL登录系统;

6.利用VBA可以Excel内轻松开发出功能强大的自动化程序。

Excel不只是一个简单的电子表格操作软件,他更是一个简洁的软件开发工具,不信看看下面这个小动画吧:

第一步,如何才能打开编写VBA代码的窗口呢?

其实他有多个打开的方法:

在工作表标签上右键 - 查看代码,如下所示:

按Alt+F11

开发工具 - 点Visual Basic图标

在哪编写代码呢?

最常用的:插入 - 模块,新建一个模块用来存放编写的代码。

写代码

插入(或双击)模块后,在右侧的空白位置就是编写代码的地方。

可以执行的VBA代码(宏程序),结构是这样的:

Sub 程序名(参数)

可以执行任务的代码

End Sub

输入Sub 程序名()然后回车,End Sub就会自动输入,如下图:

在开始和结束语句之间输入代码,执行 在单元格A1中输入数字123

Range('A1') = 123

注:在VBA中,Range('单元格地址')来表示单元格,又如Range('A1:B100')表示A1:B100单元格区域。在单元格中输入值,直接用=值 即可(字符串两边要加双引用),如果清空则 =''

再编写一段清空代码:

运行代码

在编写代码时经常要测试是否正确。测试方式是把光标放在代码行的任意位置,点击运行小按钮。

点击按钮执行VBA代码

在Excel中插入的图形、图片、按钮控件都可以执行VBA代码。让它们执行很简单,只需要右键菜单中点击指定宏 - 选取编写的宏名称。

保存VBA代码

Excel2007版及以后,需要保存为“启用宏的工作簿'类型,VBA代码才能保存下来。

求VBA代码大全

1:打开所有隐藏工作表

2:循环宏

3:录制宏时调用“停止录制”工具栏

4:高级筛选5列不重复数据至指定表

5:双击单元执行宏(工作表代码)

6:双击指定区域单元执行宏(工作表代码)

7:进入单元执行宏(工作表代码)

8:进入指定区域单元执行宏(工作表代码)

9:在多个宏中依次循环执行一个(控件按钮代码)

10:在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)

11:在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)

12:根据A1单元文本隐藏/显示按钮(控件按钮代码)?

13:当前单元返回按钮名称(控件按钮代码)?

14:当前单元内容返回到按钮名称(控件按钮代码)?

15:奇偶页分别打印?

16:自动打印多工作表第一页?

17:查找A列文本循环插入分页符?

18:将A列最后数据行以上的所有B列图片大小调整为所在单元大小?

19:返回光标所在行数?20:在A1返回当前选中单元格数量?

21:返回当前工作簿中工作表数量?

22:返回光标选择区域的行数和列数?

23:工作表中包含数据的最大行数?

24:返回A列数据的最大行数?

25:将所选区域文本插入新建文本框?

26:批量插入地址批注?

27:批量插入统一批注?

28:以A1单元内容批量插入批注?

29:不连续区域插入当前文件名和表名及地址?

30:不连续区域录入当前单元地址?

31:连续区域录入当前单元地址?

32:返回当前单元地址?

33:不连续区域录入当前日期?

34:不连续区域录入当前数字日期?

35:不连续区域录入当前日期和时间?

36:不连续区域录入对勾?

37:不连续区域录入当前文件名?

38:不连续区域添加文本?

39:不连续区域插入文本?

40:从指定位置向下同时录入多单元指定内容?

41:按aa工作表A列的内容排列工作表标签顺序?

42:以A1单元文本作表名插入工作表?

43:删除所有未选定工作表?

44:工作表标签排序

45:定义指定工作表标签颜色?

46:在目录表建立本工作簿中各表链接目录?

47:建立工作表文本目录?

48:查另一文件的所有表名?

49:当前单元录入计算机名?

50:当前单元录入计算机用户名?

51:解除所有工作表保护?

52:为指定工作表加指定密码保护表?

53:在有密码的工作表执行代码?

54:执行前需要验证密码的宏(控件按钮代码)?

55:执行前需要验证密码的宏()?

56:拷贝A1公式和格式到A2?

57:复制单元数值?

58:插入数值条件格式?

59:插入透明批注?

60:添加文本?

61:光标定位到指定工作表A列最后数据行下一单元?

62:定位选定单元格式相同的所有单元格?

63:按当前单元文本定位?

64:按固定文本定位?

65:删除包含固定文本单元的行或列?

66:定位数据及区域以上的空值?

67:右侧单元自动加5(工作表代码)?

68:当前单元加2?

69:A列等于A列减B列?

70:用于光标选定多区域跳转指定单元(工作表代码)?

71:将A1单元录入的数据累加到B1单元(工作表代码)?

72:在指定颜色区域选择单元时添加/取消"√"(工作表代码)?

73:在指定区域选择单元时添加/取消"√"(工作表代码)?

74:双击指定单元,循环录入文本(工作表代码)?

75:双击指定单元,循环录入文本(工作表代码)?

76:单元区域引用(工作表代码)?

77:在指定区域选择单元时数值加1(工作表代码)?

78:混合文本的编号?

79:指定区域单元双击数据累加(工作表代码)?

80:选择单元区域触发事件(工作表代码)?

81:当修改指定单元内容时自动执行宏(工作表代码)?

82:被指定单元内容限制执行宏?

83:双击单元隐藏该行(工作表代码)?

84:高亮显示行(工作表代码)?

85:高亮显示行和列(工作表代码)

86:为指定工作表设置滚动范围(工作簿代码)

87:在指定单元记录打印和预览次数(工作簿代码)

88:自动数字金额转大写(工作表代码)

89:将所有工作表的A1单元作为单击按钮(工作簿代码)

90:闹钟——到指定时间执行宏(工作簿代码)

91:改变Excel界面标题的宏(工作簿代码)

92:在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)

93:B列录入数据时在A列返回记录时间(工作表代码)

94:当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)

95:指定单元显示光标位置内容(工作表代码)

96:每编辑一个单元保存文件

97:指定允许编辑区域

98:解除允许编辑区域限制

99:删除指定行

100:删除A列为指定内容的行

1:打开所有隐藏工作表

Sub?打开所有隐藏工作表()

Dim?i?As?Integer

For?i?=?1?To?Sheets.Count

Sheets(i).Visible?=?True

Next?i?

End?Sub

?

2:循环宏

Sub?循环()

?

?AAA?=?Range("C2")

??

?Dim?i?As?Long

??Dim?times?As?Long

??times?=?AAA?

'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)

??For?i?=?1?To?times

??Call?过滤一行

?

?If?Range("完成标志")?=?"完成"?Then

????Exit?For??

'假如名为'完成标志'的命名单元的值等于'完成',则退出循环,假如一开始就等于'完成',则只执行一次循环就退出

?

'If?Sheets("传送参数").Range("A"??i).Text?=?"完成"?Then?

Exit?For?

'假如某列出现"完成"内容则退出循环

Next?i?

End?Sub???

?????

3:录制宏时调用“停止录制”工具栏???

Sub?录制宏时调用停止录制工具栏()

??????Application.CommandBars("Stop?Recording").Visible?=?True?

End?Sub????????

4:高级筛选5列不重复数据至指定表

Sub?高级筛选5列不重复数据至Sheet2()

??????Sheets("Sheet2").Range("A1:E65536")?=?""?'清除Sheet2的A:D列

?????Range("A1:E65536").AdvancedFilter?Action:=xlFilterCopy,?CopyToRange:=Sheet2.Range(?_

?????????"A1"),?Unique:=True

??????Sheet2.Columns("A:E").Sort?Key1:=Sheet2.Range("A2"),?Order1:=xlAscending,?Header:=xlGuess,?_

OrderCustom:=1,?MatchCase:=False,?Orientation:=xlTopToBottom,?SortMethod?_

?????????:=xlPinYin?

End?Sub????????

5:双击单元执行宏(工作表代码)???

Private?Sub?Worksheet_BeforeDoubleClick(ByVal?Target?As?Range,?Cancel?As?Boolean)

If?Range("$A$1")?=?"关闭"?Then

Exit?Sub??????

Select?Case?Target.Address

?????????Case?"$A$4"

?????????????Call?宏1

?????????????Cancel?=?True

?????????Case?"$B$4"

?????????????Call?宏2

?????????????Cancel?=?True

?????????Case?"$C$4"

?????????????Call?宏3

?????????????Cancel?=?True

????????Case?"$E$4"

?????????????Call?宏4?

?????????????Cancel?=?True

?????End?Select?

End?Sub

6:双击指定区域单元执行宏(工作表代码)

Private?Sub?Worksheet_BeforeDoubleClick(ByVal?Target?As?Range,?Cancel?As?Boolean)

?????If?Range("$A$1")?=?"关闭"?Then?Exit?Sub

?????If?Not?Application.Intersect(Target,?Range("A4:A9",?"C4:C9"))?Is?Nothing?Then?Call?打开隐藏表

?End?Sub

7:进入单元执行宏(工作表代码)???

Private?Sub?Worksheet_SelectionChange(ByVal?Target?As?Range)?'以单元格进入代替按钮对象调用宏??????

If?Range("$A$1")?=?"关闭"?Then?Exit?Sub?????

Select?Case?Target.Address

??????????Case?"$A$5"?'单元地址(Target.Address),或命名单元名字(Target.Name)?

????????????Call?宏1

?????????Case?"$B$5"

?????????????Call?宏2

?????????Case?"$C$5"

?????????????Call?宏3

??????End?Select

?End?Sub

8:进入指定区域单元执行宏(工作表代码)

Private?Sub?Worksheet_SelectionChange(ByVal?Target?As?Range)

If?Range("$A$1")?=?"关闭"?Then?Exit?Sub

If?Not?Application.Intersect(Target,?Range("A4:A9","C4:C9"))?Is?Nothing?Then?Call?打开隐藏表?

End?Sub

9:在多个宏中依次循环执行一个(控件按钮代码)

Private?Sub?CommandButton1_Click()

Static?RunMacro?As?Integer

Select?Case?RunMacro

Case?0

宏1

RunMacro?=?1

Case?1

宏2

RunMacro?=?2

Case?2

宏3

RunMacro?=?0

End?Select?

End?Sub

10:在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)

Private?Sub?CommandButton1_Click()

With?CommandButton1

If?.Caption?=?"保护工作表"?Then

Call?保护工作表

?.Caption?=?"取消工作表保护"?

Exit?Sub

End?If

If?.Caption?=?"取消工作表保护"?Then

Call?取消工作表保护

?.Caption?=?"保护工作表"?

Exit?Sub

End?If

End?With?

End?Sub

11:在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)???

Option?Explicit??Private?Sub?CommandButton1_Click()

With?CommandButton1

If?.Caption?=?"宏1"?Then

Call?宏1

?.Caption?=?"宏2"?

Exit?Sub

End?If

If?.Caption?=?"宏2"?Then

Call?宏2

.Caption?=?"宏3"

Exit?Sub

End?If

If?.Caption?=?"宏3"?Then

Call?宏3

.Caption?=?"宏1"

Exit?Sub

End?If

End?With?

End?Sub?

12:根据A1单元文本隐藏/显示按钮(控件按钮代码)

Private?Sub?Worksheet_SelectionChange(ByVal?Target?As?Range)?

If?Range("A1")??2?Then

??CommandButton1.Visible?=?1

?Else

??CommandButton1.Visible?=?0

?End?If?

End?Sub??

Private?Sub?CommandButton1_Click()

?重排窗口?

End?Sub????????

13:当前单元返回按钮名称(控件按钮代码)???

Private?Sub?CommandButton1_Click()?

ActiveCell?=?CommandButton1.Caption?

End?Sub????????

14:当前单元内容返回到按钮名称(控件按钮代码)???

Private?Sub?CommandButton1_Click()?

CommandButton1.Caption?=?ActiveCell?

End?Sub????????

15:奇偶页分别打印???

Sub?奇偶页分别打印()?

Dim?i%,?Ps%??

Ps?=?ExecuteExcel4Macro("GET.DOCUMENT(50)")?'总页数?

MsgBox?"现在打印奇数页,按确定开始."?

For?i?=?1?To?Ps?Step?2?

ActiveSheet.PrintOut?from:=i,?To:=i?

Next?i??

MsgBox?"现在打印偶数页,按确定开始."?

For?i?=?2?To?Ps?Step?2??????

ActiveSheet.PrintOut?from:=i,?To:=i?

Next?i?

End?Sub????????

16:自动打印多工作表第一页???

Sub?自动打印多工作表第一页()?

Dim?sh?As?Integer?

Dim?x?

Dim?y?

Dim?sy?

Dim?syz??

x?=?InputBox("请输入起始工作表名字:")?

sy?=?InputBox("请输入结束工作表名字:")?

y?=?Sheets(x).Index?

syz?=?Sheets(sy).Index?

For?sh?=?y?To?syz?

Sheets(sh).Select??

Sheets(sh).PrintOut?from:=1,?To:=1?

Next?sh?

End?Sub????????

17:查找A列文本循环插入分页符???

Sub?循环插入分页符()??

'?Selection?=?Workbooks("临时表").Sheets("表2").Range("A1")?调用指定地址内容???

Dim?i?As?Long?

Dim?times?As?Long??

times?=?Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"),?"分页")??????'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)?

For?i?=?1?To?times?

Call?插入分页符?

Next?i?

End?Sub

Sub?插入分页符()?????

Cells.Find(What:="分页",?After:=ActiveCell,?LookIn:=xlValues,?LookAt:=?_?

xlPart,?SearchOrder:=xlByRows,?SearchDirection:=xlNext,?MatchCase:=False)?_?????????

.Activate??????

ActiveWindow.SelectedSheets.HPageBreaks.Add?Before:=ActiveCell?

End?Sub

Sub?取消原分页()?????

Cells.Select??????

ActiveSheet.ResetAllPageBreaks?

End?Sub

18:将A列最后数据行以上的所有B列图片大小调整为所在单元大小???

Sub?将A列最后数据行以上的所有B列图片大小调整为所在单元大小()?????

Dim?Pic?As?Picture,?i??????

i?=?[A65536].End(xlUp).Row?????

For?Each?Pic?In?Sheet1.Pictures??????????

If?Not?Application.Intersect(Pic.TopLeftCell,?Range("B1:B"??i))?Is?Nothing?Then

?????????????Pic.Top?=?Pic.TopLeftCell.Top

?????????????Pic.Left?=?Pic.TopLeftCell.Left

??????????????Pic.Height?=?Pic.TopLeftCell.Height

?????????????Pic.Width?=?Pic.TopLeftCell.Width

?????????End?If

?????Next?

End?Sub

19:返回光标所在行数???

Sub?返回光标所在行数()?????

x?=?ActiveCell.Row?????

Range("A1")?=?x?

End?Sub????????

20:在A1返回当前选中单元格数量???

Sub?在A1返回当前选中单元格数量()?????

[A1]?=?Selection.Count?

End?Sub

21:返回当前工作簿中工作表数量

Sub?返回当前工作簿中工作表数量()?????

t?=?Application.Sheets.Count?????

MsgBox?t?

End?Sub????????

?

????

93:B列录入数据时在A列返回记录时间(工作表代码)

Public?Sub?Worksheet_Change(ByVal?Target?As?Range)?

If?Target.Column?=?2?Then?

Target.Offset(,?-1)?=?Now?

End?If?

End?Sub????????

94:当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)???

Public?Sub?Worksheet_Change(ByVal?Target?As?Range)??

If?Not?Application.Intersect(Target,?[A1:A1000])?Is?Nothing?Then?

If?Target.Column?=?1?Then?

Target.Offset(,?1)?=?Date?

Target.Offset(,?2)?=?Time?

End?If?

End?If?

End?Sub???

Public?Sub?Worksheet_Change(ByVal?Target?As?Range)??

If?Not?Application.Intersect(Target,?[A1:A1000])?Is?Nothing?Then?

If?Target.Column?=?1?Then??

Target.Offset(,?1)?=?Format(Now(),?"yyyy-mm-dd")?

Target.Offset(,?2)?=?Format(Now(),?"h:mm:ss")?

End?If?

End?If?

End?Sub????????

95:指定单元显示光标位置内容(工作表代码)???

Private?Sub?Worksheet_SelectionChange(ByVal?T?As?Range)?

Sheets(1).Range("A1")?=?Selection?

End?Sub????????

96:每编辑一个单元保存文件???

Private?Sub?Worksheet_Change(ByVal?Target?As?Range)?

ThisWorkbook.Save?

End?Sub????????

97:指定允许编辑区域

Sub?指定允许编辑区域()??

ActiveSheet.ScrollArea?=?"B8:G15"?

End?Sub????????

98:解除允许编辑区域限制???

Sub?解除允许编辑区域限制()?

ActiveSheet.ScrollArea?=?""?

End?Sub????????

99:删除指定行???

Sub?删除指定行()??

Workbooks("临时表").Sheets("表2").Range("5:5").Delete?

End?Sub????????

100:删除A列为指定内容的行???

Sub?删除A列为指定内容的行()?

Dim?a,?b?As?Integer??

a?=?Sheet1.[a65536].End(xlUp).Row????

For?b?=?a?To?2?Step?-1????????

If?Cells(b,?1).Value?=?"删除"?Then??????????

Rows(b).Delete???????

End?If????

Next?

End?Sub

excel vba常用代码

Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。?[1]

数据类型

基本数据类型

即Primary Type Data,下述列表的括号内为字节数:

Byte?(1):无符号数类型,取值范围0-255

Boolean?(2)

Integer(2)

Long?(4)

Single?(4)

Double?(8)

Currency?(8)

Decimal?(14)

Date?(8)

String

Object?(4)

Variant?(根据分配确定)?[2]

自定义的数据类型

相当于C语言的struct,例如:?[2]

Type 自定义类型名 元素名 As 类型 … [元素名 As 类型] End Type

数组

Option Base 0 :数组索引值从0开始?[2]

Option Base 1 :数组索引值从1开始

Dim MyArray(10) :声明一个数组变量,10是最大的可用的数组索引值

MyArray(5) = 101 :给数组的元素赋值

Dim Data(10,5) :声明一个二维数组变量

Data(1,1) = "A001" :给数组元素赋值

Dim cArr(-11 To 20, 1 To 3) As String :声明一个数组,定义数组索引值的上下界

Dim dArr() As String :声明动态数组

ReDim dArr(0 To 5, 1 To 2) :改变动态数组的尺寸默认把原数据清除。如果保留原来的数据,必须加上参数

Preserve:使用Preserve参数时只能改变最后一位的大小

If UBound(vTemp) = -1 Then:判断数组变量vTemp是否为空数组

End If Erase MyArrar, Data Erase语句清除数组元素,释放变量占用的空间?[2]

常量

编辑

系统定义常量

系统定义常量有3个:True、False和Null。?[4]

固有常量

固有常量是编程时引用的对象库定义的常量。所有固有常量都可以在宏或VBA代码中使用。通常,固有常量通过前两个字母来指明定义该常量。来自VB库的常量则以“vb”开头。来自Access的常量以“ac”开头。可以使用对象浏览器来查看所有对象库中的固有常量列表。?[4]

在VBA中,常量的数据类型有整型、长整型、单精度型、双精度型、字节型、货币型、字符型、日期型和逻辑型。一个整型数据就是一个整型常量,一个长整型数据就是一个长整型常量。例如,12%、-1%是整型常量,32768、10000000是长整型常量,-2.5 1、3.14是单精度实型常量,3.1415926#是双精度实型常量,China、Shanghai是字符型常量,#07/13/2001 11:45PM#是日期常量,由符号 “ # ” 将字符括起来。?[4]

符号常量

可以自行定义的常量即符号常量,必须先定义,后使用。可见,需要声明的常量都是符号常量。?[4]

基本语法格式:

1? ?[?Publicr/?Private]?Const??常量名[As??类型]=表达式? ?

如:Global Const?符号常量名称 = 常量值?[4]

语句功能:

定义一个符号常量,并将指定表达式的值赋给符号常量。?[4]

语句说明如下:?[4]

1)“常量名”指定符号常量的名字。符号常量名可以由字母、数字和下画线组成,但只能以字母开头,不能含有空格。?[4]

2)“表达式”指定符号常量的值。该表达式通常由数值型、字符型、逻辑型或日期型数据以及各种运算符组成,但在表达式中不能出现变量和函数。?[4]

3) public用来表示这个常量的作用范围是整个数据库的所有模块。?[4]

4) private则表示这个常量只在使用该声明常量语句的模块中起作用。?[4]

说明:

1)除用户定义的符号常量外,VBA还提供了许多符号常量,我们可以直接使用。?[4]

2)对数码比较长,并且在程序中多次使用的常量,通常使用符号常量代替。运行程序时,系统自动把程序中的所有符号常量换为赋给它的值。?[4]

变量

编辑

与常量一样,变量也是一块内存空间,用于保存程序运行过程中可能变化的数据。变量的名称是用户定义的一个标识符。?[5]

在代码中需要使用该变量时,只需引用相应的标识符即可,而不用管变量当前的值具体是什么。?[5]

声明

与用户自定义的常量相似,变量在使用之前都需要声明,在VBA中声明变量的语法格式有以下几种:?[5]

关键字变量名 AS?数据类型

关键字变量1,变量2 ... 变量n AS?数据类型

关键字变量1 AS?数据类型,变量2 As?数据类型, ... ,变量n AS数据类型

在第二种语法格式中, “变量n”的数据类型为AS关键字后定义的数据类型,而“变量1”、“变量2”、…的数据类型为变体型。?[5]

在VBA中,可用Dim、Private、Public和Static这4个关键字来声明变量,使用不同关键字声明的变量其含义也有所不同。?[5]

◆ 利用Dim关键字声明变量:Dim关键字主要用来在内存中分配一块空间,并为该空间命名,是VBA中声明变量最常用的关键字。使用Dim关键字声明的变量只能在当前过程或模块中使用。?[5]

◆ 利用Private关键字声明变量:Private关键字用于在类模块中声明一个私有变量,它只能在当前的类模块中使用。当定义变量的位置同处于类模块中时,其使用效果与使用Dim关键字定义的变量相同。?[5]

◆ 利用Public关键字声明变量:利用Public关键字声明的变量可以在程序的任何地方调用,而与声明变量的位置无关。?[5]

◆ 利用Static关键字声明变量:Static关键字用于声明静态变量,即变量的值在整个代码运行期间都能被保留。?[5]

赋值

变量在使用时还需要对其进行赋值。在VBA中对变量进行赋值可通过 “ = ” 符号或 “ Set ” 关键字进行。通过 “ = ” 符号对变量赋值的语法格式有以下几种。?[5]

变量名=数据

变量1=变量2 运算符 数据

变量1=变量2 运算符 变量3 … 运算符 变量n

如果在定义变量时指定了变量的数据类型,则为变量所赋的值也必须是该数据类型的值。如果变量定义为Integer类型,而在赋值时却给了变量一个String类型的数据,则在编译运行的过程中将弹出错误弹框。?[5]

运算符

编辑

运算符是在程序中执行计算功能的某些特殊符号,它是程序代码的重要组成部分。在程序代码中,运算符不能单独使用,必须与其操作数共同组成表达式后才具有运算意义。VBA中的运算符包含算术运算符、连接运算符、比较运算符和逻辑运算符等。?[4]

算术运算符

算术运算符主要用于执行四则运算,仅用算术运算符连接起来的表达式称为算术表达式。算术运算符及其作用与示例如表所示。?[5]

例子

名称

结果

-$a

? ?

取反

? ?

$a 的负值。

? ?

$a + $b

? ?

加法

? ?

$a 和 $b 的和。

? ?

$a - $b

? ?

减法

? ?

$a 和 $b 的差。

? ?

$a * $b

? ?

乘法

? ?

$a 和 $b 的积。

? ?

$a / $b

? ?

除法

? ?

$a 除以 $b 的商,允许小数。

? ?

$a \ $b ? ?除法 ? ?$a 除以 $b 的商,结果取整。 ?

$a Mod $b

? ?

取余

? ?

$a 除以 $b 的余数

? ?

注意:

在执行算术运算时,运算符两侧操作的数据类型必须相同,否则会出现“类型不匹配”的错误提示。当“+”运算符左右两侧都是字符串类型的操作数时,执行的是连接运算,如表达式“"Pass+"word"的计算结果为字符串“ PassWord ”。?[5]

连接运算符

连接运算符的作用是将运算符两侧的操作数连接成一个数,其操作数的数据类型通常都为String类型。VBA中的连接运算符有“”和“+”两种,由于使用“+”执行连接运算时,容易与加法运算混淆,所以通常都采用“”进行连接运算。?[5]

比较运算符

比较运算符可以对运算符两侧的操作数执行比较运算,其返回结果为Boolean类型的True或False。比较运算符的操作数通常为具体的数值,当操作数为字符串或其他符号时,是根据该符号的ASCII码进行比较的。VBA中的比较运算符及其作用与示例如表所示。?[5]

例子

名称

结果

$a = $b

? ?

等于

? ?

TRUE,如果 $a 等于 $b。

? ?

$a $b

? ?

不等

? ?

TRUE,如果 $a 不等于 $b。

? ?

$a $b

? ?

小于

? ?

TRUE,如果 $a 严格小于 $b。

? ?

$a $b

? ?

大于

? ?

TRUE,如果 $a 严格大于 $b。

? ?

$a = $b

? ?

小于等于

? ?

TRUE,如果 $a 小于或者等于 $b。

? ?

$a = $b

? ?

大于等于

? ?

TRUE,如果 $a 大于或者等于 $b。

? ?

逻辑运算符

逻辑运算符用于对运算符两侧的操作数执行逻辑运算,参与逻辑运算的操作数本身可以是逻辑表达式(表达式的最终结果为True或 False),也可以是算术表达式(表达式的最终返回值为0或非0)。?[5]

在逻辑运算中,数值0与逻辑值 False相同,表示逻辑假;非0数值与True相同,表示逻辑真。逻辑运算符及其含义与示例如表所示。?[5]

例子

名称

结果

$a and $b

? ?

And(逻辑与)

? ?

TRUE,如果 $a 与 $b 都为TRUE。

? ?

$a or $b

? ?

Or(逻辑或)

? ?

TRUE,如果 $a 或 $b 任一为TRUE。

? ?

$a xor $b

? ?

Xor(逻辑异或)

? ?

TRUE,如果 $a 或 $b 同位相异。

? ?

Not(12)

? ?

Not(逻辑非)

? ?

TRUE。

? ?

(12) Eqv (12)

? ?

两个操作数同为假,返回False;两个操作数同为真,返回True;两个操作数一真一假,返回False

? ?

TRUE。

? ?

21 Imp 35

? ?

运算符左右同为真,返回True;左右同为假,返回True;左真右假,回返 False;左假右真,返回True

? ?

TRUE。

? ?

语法结构

编辑

if 语句

1? ?if?条件1?then???语句1elseif?条件2?then???语句2elseif?...????...else???语句nend?if? ?

Select Case 语句

1? ?Select?Case?表达式???Case?表达式列表1???????语句1???Case?表达式列表2???????语句2???????...???Case?表达式列表n???????语句nEnd?Select?? ?

其中的表达式列表可以为:?[5]

表达式?例: "A"

用逗号分隔的一组枚举表达式例:2,4,6,8

表达式1 To?表达式2 例:60 To 100

Is?关系运算符表达式 例:Is 60

Do...Loop 语句

1? ?Do?While或Until?条件???语句块1???Exit?Do???语句块2Loop? ?

For...Next语句

1? ?Do???语句块1???Exit?Do???语句块2Loop?While或Until?条件? ?

For Each … Next语句

1? ?For?循环控制变量=初值To?终值Step?步长???语句块?‘Exit?For语句可以跳出循环体Next? ?

跳出本次循环的continue语句

1? ?For?循环控制变量=初值?To?终值?Step?步长????Do?'用于模拟continue????????语句块?????????If?条件?Then?Exit?Do?'用于模拟continue????????语句块?????Loop?While?False?'用于模拟continue?Next? ?

With语句

1? ?With?对象引用???语句块End?With? ?

On Error语句

1? ?On?Error?Goto?出错处理语句的label?'跳转到出错处理语句? ?

1? ?On?Error?Resume?Next?'遇到错误,不管错误,继续往下执行? ?

具有控制作用的函数

If(条件式,表达式1,表达式2)?[5]

Switch(条件式1,表达式1,[条件式2,表达式2[,...,条件式n,表达式n]])

Choose(索引式,选项1[,选项2,...[,选项n]]) '这是基于1的索引

其他语句

编辑

注释语句

使用REM或者单引号开始的行。?[6]

语句的连写与续行

如果一行包括多条语句,用冒号分割各个语句。跨多行的语句,在行末用“空格加下划线”表示续行?[6]??。

过程与函数

编辑

12? ?Sub?过程名(参数表)????语句块????Exit?Sub????语句块End?Sub??? ?

1? ?Function?函数名(参数表)?As?Type???语句块???函数名=表达式???Exit?FunctionEnd?Function? ?

可以是Private、Public、Friend、Static等修饰。?[6]

调用函数/过程时,可以加括号或者不加括号。如果调用表达式作为一行的一部分,那么必须用参数,例如函数调用的返回值赋给变量。 调用过程时, 可以使用/不使用call关键字。使用call语句调用过程,如果无参数,则不加括号;如果有参数,必须加括号。如果调用时用括号包住单个参数,则该参数强行按值传递。需要特别注意,不用call不加括号的调用,形参与实参是传值(passed by value)而不是传引用(passed by reference),这会导致一些对象的方法调用失败。例如:?[6]

1? ?Dim?cn?As?ADODB.Connection????Set?cn?=?CurrentProject.Connection????Dim?rs?As?New?ADODB.Recordset????????rs.Open?"SELECT?*?FROM?myTable"?,?cn????Dim?ExcelApp?As?New?Excel.Application????Dim?ExcelWst?As?Worksheet????Set?ExcelWst?=?ExcelApp.Workbooks.Add.Worksheets(1)????ExcelWst.Range("A2").CopyFromRecordset(rs)?'失败,无法执行该行????ExcelWst.Range("A2").CopyFromRecordset?rs??'可成功执行该行? ?

常用内置函数

编辑

VBA的常用内置函数:?[5]

MsgBox

InputBox

舍入函数:Fix 向0取整,Int向下取整, Round四舍五入

Rnd: 返回0-1内的单精度随机数

字符串函数:?[5]

Filter:对字符串的一维数组的过滤

InStr([Start, ]Str1,Str2[, Compare])与InStrRev: 查找子串

Len:字符串长度

Join:连接一维数组中的所有子字符串

Left,Right,Mid: 截取子字符串

Space(数值) :生成空格字符串

Ucase,Lcase:大小写转换函数

Ltrim, Rtrim,Trim :删除首尾空格

Replace

Split:分割一个字符串成为一维数组

StrComp:字符串比较

StrConv:字符串转换

String(number, character):制定字符重复若干次

StrReverse

日期/时间有关函数:?[5]

Year, Month, Day, WeekDay,Hour,Minute,Second: 截取日期时间分量

DateAdd: 日期/时间增量函数

DateDiff(间隔类型,日期1,日期2[,W1][,W2])日期/时间的距离函数

DatePart(分割类型,日期[,w1][,w2])时间分割函数

DateSerial(表达式1,表达式2,表达式3) 合成日期;DateValue(“字符串表达式”)返回日期;

Date,Time,Now,Timer: 返回日期时间

DateValue

TimeSerial:由时间序列得到时间对象

TimeValue:由时间字符串得到时间对象

Weekday:获得日期的周几

WeekdayName

转换函数:CBool、CByte、CCur、?CDate、 CDbl、CDec、CInt、?CLng、CLngLng、CLngPtr、?[5]??CSng、CStr、CVar、CVErr、Asc(字符串表达式)返回第一个字符的Ascii编码值、Chr(ASCII码)返回字符、Hex、Oct、Str(数值表达式)返回字符串、Val(string)、Format、FormatCurrency、FormatDateTime、FormatNumber、FormatPercent、MonthName。

Nz(表达式或字段属性值[,规定值])如果是空,则返回0或者""或者函数的第二个参数值?[5]

验证函数:isNumeric、isDate、isNull、isEmpty、IsArray、IsError、IsMissing、IsObject?[5]

数学函数:Abs、Sqr、Tan、Atn(即atan)、Sin、Cos、Exp(e为基的指数)、Log自然对数?[5]

Array:构造一个Array对象?[5]

CallByName: get or set a property, or invoke a method at run time using a string name.?[5]

控制流:Choose:类似于C语言的select语句、If相当于IF-ELSE语句、Switch?[5]

Command:获取命令行参数?[5]

CreateObject:创建ActiveX对象

CurDir:返回指定驱动器的当前工作路径?[5]

由基本数学函数导出的函数:Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN

DoEvents:暂时把CPU控制权交回给系统?[5]

Environ:返回环境变量的值?[5]

文件操作:?[5]

Dir:返回满足条件的所有文件、目录的名字

EOF

FileAttr

FileDateTime

FileLen

FreeFile Function

GetAttr:返回文件、目录的属性值

Input:读取文件

Loc:文件指针位置

LOF:文件打开时的指针位置

Seek:文件指针定位

Spc:使用Print做position output

Tab:用于Print函数

Error:错误号对应的错误消息?[5]

Windows Registry中的数据:GetAllSettings、SaveSetting、DeleteSetting、GetSetting?[5]

GetObject:ActiveX组建的引用?[5]

IMEStatus:返回当前Input Method Editor (IME)?[5]

Macintosh平台:MacID、MacScript?[5]

金融函数:?[5]

DDB:使用double-declining balance计算贬值

FV:计算固定利率的年金

IPmt:计算利率

IRR:计算利率

MIRR:计算利率

NPer:计算周期数

NPV:计算net present value

Pmt:计算支付数

PPmt:计算本金支付数

PV:计算present value

Rate:利息率

SLN:straight-line depreciation

SYD:计算sum-of-years' digits depreciation

Partition:返回字符串,表示一个数值名字落在各个range内。常用于SQL select语句?[5]

QBColor:颜色值?[5]

RGB:颜色值?[5]

TypeName:得到变量的类型名?[5]

VarType:得到变量的类型数?[5]

vba编程基础知识

vba编程基础知识有下面这些:

VBA是编辑语言,宏是用VBA代码保存下来的程序。

VBA代码都是以“Sub宏名”及一对空括号开头,以“End Sub”结尾。

模块是保存过程的地方,一个模块可以保存多个不同类型的过程。

对象,工作簿,工作表,单元格,图片,图表,透视表等。

每个对象都有属性,属性是对象包含的内容或特点。(对象.属性)

对象的某些属性也是对象,属性和对象是相对而言的。

每个对象都有方法,方法是指在对象上执行的某个动作。(对象.方法)

VBA的编辑环境——VBE(Visual Basic Editor)

进入VBE的方法:

Alt + F11。

右击工作表,选择View Code 3. DEVELOPER下的Visual Basic。

立即窗口(view- Immdediate Window)中直接输入命令,回车后将显示命令执行后的结果。如果立即窗口未显示,快捷键Ctrl + G

因为VBA程序一般保存在模块里,所以先添加一个模块。

Excel表格VBA入门基础语句有哪些

1.1 认识宏 2

1.1.1 什么是宏 2

1.1.2 宏的运行原理 2

1.1.3 宏的制作方法 3

1.2 录制宏 4

1.3 执行宏 7

1.3.1 通过【宏】对话框执行宏 7

1.3.2 通过图形执行宏 8

1.3.3 通过窗体按钮执行宏 9

1.3.4 添加菜单或工具栏命令执行宏 11

1.4 加载宏 12

1.4.1 Excel提供的加载宏 13

1.4.2 其他来源提供的加载宏 13

1.4.3 录制宏制作的加载宏 14

1.5 宏的数字签名 15

1.5.1 数字签名的前提条件 16

1.5.2 安装数字签名 16

1.6 录制宏的实例应用 19

1.6.1 自动完成报表累计 19

1.累加宏的录制和按钮编辑 19

2.累加恢复宏的录制和按钮编辑 21

3.清空本月数据宏的录制和按钮编辑 22

1.6.2 自动完成高级筛选 22

1.按钮设置过程 23

2.按钮使用方法 24

1.7 小结 25

1.8 习题 25 2.1 什么是VBE 28

2.2 VBE基本结构 28

2.3 VBE工程窗口 29

2.3.1 Miscrosoft Excel对象 30

2.3.2 窗体 31

2.3.3 模块 31

1.添加模块 32

2.移除、导出和导入模块 32

2.3.4 类模块 33

2.4 VBE属性窗口 33

2.5 VBE代码窗口 36

2.5.1 代码窗口的结构 36

1.对象列表框 37

2.过程列表框 37

3.程序分隔线 37

4.全模块视图和过程视图按钮 37

5.边界标识条 38

2.5.2 代码窗口的特征 38

1.自动调整关键字、属性和方法的大小写 38

2.自动在运算符之间插入空格 38

3.自动显示成员列表 38

4.自动显示参数信息 39

5.添加代码注释 39

6.长代码语句换行 39

2.5.3 代码运行结果测试 40

1.快捷键测试 40

2.工具栏按钮测试 40

2.6 小结 40

2.7 习题 40 3.1 Excel VBA程序 42

3.1.1 过程程序 42

1.过程程序的添加 42

2.子过程程序 43

3.函数过程程序 47

3.1.2 事件程序 47

1.添加事件程序 47

2.事件程序的基本结构 48

3.事件程序中的自变量传递 49

3.2 Excel VBA代码结构 50

3.2.1 对象、属性和方法 51

1.对象 51

2.属性 51

3.方法 52

3.2.2 运算符 53

3.2.3 常用语句 53

1.With语句 54

2.判断结构语句 55

3.循环语句 57

4.错误转移语句 59

3.2.4 变量的使用 60

1.变量的数据类型 61

2.强制声明变量 62

3.变量的声明方法 63

4.变量的生存期 64

3.2.5 函数的使用 65

1.使用VBA函数 65

2.调用工作表函数 65

3.自定义函数 66

3.3 小结 66

3.4 习题 66 4.1 新建工作簿 68

4.1.1 新建空白工作簿 68

4.1.2 在指定位置新建工作簿 68

4.2 打开工作簿 69

4.2.1 打开指定工作簿 70

4.2.2 打开已保护的工作簿 70

4.2.3 判断一个工作簿是否已经打开 71

4.2.4 编制简易工作簿密码破解程序 72

4.3 保存工作簿 75

4.3.1 保存修改后的结果 75

4.3.2 另存为其他Excel文件 75

1.指定路径另存为其他文件 75

2.指定路径备份文件 76

3.指定路径另存并添加工作簿打开密码 76

4.4 关闭工作簿 76

4.4.1 关闭所有工作簿 76

4.4.2 关闭指定工作簿 76

4.4.3 关闭前是否保存 77

1.关闭指定工作簿前保存 77

2.关闭指定工作簿不保存 77

3.关闭当前工作簿前保存 77

4.关闭当前工作簿不保存 77

4.5 工作簿常用事件及应用 78

4.5.1 打开工作簿时提示当前日期和时间 78

4.5.2 使关闭按钮失效 79

4.5.3 禁止打印本文件内容 80

4.5.4 禁止编辑工作簿中的所有单元格 80

4.6 小结 82

4.7 习题 82 5.1 插入工作表 84

5.1.1 插入指定数量工作表 84

1.插入单个空白工作表 84

2.插入多个空白工作表 84

5.1.2 指定位置插入工作表 84

1.在指定工作表前插入工作表 84

2.在指定工作表后插入工作表 85

3.在工作表最后位置插入工作表 85

4.在工作表最前位置插入工作表 85

5.1.3 插入工作表的命名 85

1.为插入的单个工作表命名 86

2.插入多个工作表并分别命名1~12月 86

5.1.4 插入前判断工作表是否存在 87

5.2 选取工作表 88

5.2.1 选取指定工作表和设置活动工作表 88

1.选取指定工作表 88

2.设置活动工作表 88

5.2.2 选取多个工作表 89

5.3 隐藏工作表 90

5.3.1 隐藏一个或多个工作表 90

(责任编辑:IT教学网)

更多

推荐MYSQL文章