vba编程代码大全dim(vba编程代码大全)

http://www.itjxue.com  2023-03-16 01:08  来源:未知  点击次数: 

关于Excel中VBA代码理解

Const RedIndex = 1 (什么意思?)

这是定义常量,以后凡是遇到RedIndex 的地方,都表示整数1,编程时候这样做的好处是,以后如果需要修改为2的时候只改这一个地方就好了。

Dim a(20) As Integer (以下11行代码表示什么意思?)

Dim i As Integer

Dim j As Integer

For i = 1 To 20

Randomize

l:

a(i) = Int(40 * Rnd + 1)

For j = 1 To i - 1

If a(j) = a(i) Then GoTo l

Next j

Next i

这段代码的功能是在数组a中产生20个不同的随机数(1-40之间)

For Each cell In Selection

If cell.Value = a(1) Then cell.Interior.ColorIndex = RedIndex

If cell.Value = a(2) Then cell.Interior.ColorIndex = RedIndex

Next cell

这4行代码的功能是,对选择范围内单元格,如果值和数组a中前两个相同,就设置填充颜色为红色。此时数组a中是随机数数,实际上就是随机填充部分单元格的颜色。

求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编程——从键盘接收5个数,判断其中奇数偶数的个数,怎么写编程?

你好!根据楼主的问题,大致写出如下代码,望笑纳。

(一)VBA程序代码:

Sub?input_n()

Dim?j1,?j2,?j3,?str1

On?Error?Resume?Next

For?j1?=?0?To?4??'执行5次循环

?j2?=?InputBox("数值=",?"请输入数值")??'输入对话框

?j3?=?j3??"?"??j2??'数据拼接

?If?j2?Mod?2?=?0?Then??'如果余数是0,则为偶数

??str1?=?str1??"?"??"偶数"

?Else

??str1?=?str1??"?"??"奇数"

?End?If

Next

MsgBox?"输入的数据:"??Chr(13)??j3??Chr(13)??str1??'弹窗提示

End?Sub

(二)程序运行之后,将会弹出输入框,依次输入5个数之后,将会弹出奇偶的结果。

Excel之vba代码

hi,本来想把改动的地方标出来,后来发现改动还蛮多的,就不一一标出了,现在应该可以运行了。

Sub Test()

Dim i As Integer, iRow As Integer

Dim strPath As String

Dim TheSheet As Worksheet

iRow = 1

Set TheSheet = ActiveWorkbook.Worksheets("sheet1")

strPath = ""E:\可丢\hua"

With Application.FileSearch

.LookIn = strPath

.SearchSubFolders = True

.Filename = "*.*"

If .Execute 0 Then

For i = 1 To .FoundFiles.Count

'Range("A" i) = .FoundFiles(i)

Workbooks.Open (.FoundFiles(i))

For j = 1 To ActiveWorkbook.Worksheets.Count

'ActiveWorkbook.Worksheets(i).Cells(1, 1).Value = "a"

ActiveWorkbook.Worksheets(j).UsedRange.Copy

TheSheet.Activate

While TheSheet.Range("a" iRow).Value ""

iRow = iRow + 1

Wend

TheSheet.Range("A" iRow).Select

ActiveSheet.Paste

ActiveWorkbook.Save

Next j

Workbooks(Workbooks.Count).Close

Next i

End If

End With

End Sub

如何用VBA编程实现将满足条件的数据填充到另一个指定的表格中?

看不出难度呀,单元格是一对一的复制,表1的B-F列右移一下到表2的C-G列,8节课在2-3、4-5之间添加一个空行,要求就是这样吗,解决此问题用公式最好,如果作为学VBA的例子,主要是练习数组使用、FOR循环使用。代码可以这样:

dim arr1,arr2,i,j,t

arr1=sheets("表1").range("a1:f10")

arr2=sheets("表2").range("c5:g14") '需要填写数据的区域

t=Array(0,3,4,0,5,6,0,7,8,9,10) '行对应关系,t(x)值表示arr2的x行数据在arr1中的行号

for i=lbound(arr2) to ubound(arr2)

if t(i)0 then

for j=lbound(arr2,2) to ubound(arr2,2)

arr2(i,j)=arr1(t(i), j+1)

next j

end if

next i

sheets("表2").range("c5:g14")=arr2 '写入数据

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]

(责任编辑:IT教学网)

更多

推荐Fireworks教程文章