文档库 最新最全的文档下载
当前位置:文档库 › VBA理论练习题

VBA理论练习题

VBA理论练习题
VBA理论练习题

第一部分(模块与VBA编程基础<习题8>)(p1~p6)一、选择题(1~17)(p1-p3):

1.VBA中定义符号常量可以用关键字

A)Const B)Dim C)Public D)Static

2.Sub过程和Function过程最根本的区别是

A)Sub过程的过程名不能返回值,而Function过程能通过过程名返回值

B)Sub过程可以使用Call语句或直接使用过程名,而Function过程不能

C)两种过程参数的传递方式不同

D)Function过程可以有参数,Sub过程不能有参数

3.定义了二维数组A(2 to 5,5),则该数组的元素个数为

A)25 B)36 C)20 D)24

4.已知程序段:

s=0

For i=1 To 10 step 2

s=s+1

i=i*2

Next i

当循环结束后,变量i的值为a,变量s的值为b。

a. A)10 B)11 C)22 D)16

b.A)3 B)4 C)5 D)6

5.以下内容中不属VBA提供的数据验证函数是

A)IsText B)IsDate C)IsNumeric D)IsNull

6.已定义好有参函数f(m),其中形参m是整型量。下面调用该函数,传递实参为5将返回的函数值赋给变量t.以下正确的是

A)t=f(m) B)t=Call(m) C)t=f(5) D)t=Callf(5)

7.在有参函数设计时,要想实现某个参数的“双向”传递,就应当说明该形参为“传址”调用形式。其设置选项是

A)ByVal B)ByRef C)Optional D)ParamArray

8.在VBA代码调试过程中,能够显示出所有在当前过程中变量声明及变量值信息的是

A)快速监视窗口 B)监视窗口C)立即窗口 D)本地窗口

9.VBA的逻辑值进行算术运算时,True值被当作

A)0 B)-1 C)1 D)任意值

10.VBA中不能进行错误处理的语句结构是

A)On Error Then标号 B)On Error Goto 标号

C)On Error Resume Next D)On Error Go 100

11.VBA中用实际参数a和b调用有参过程Area(m,n)的正确形式是

A)Aream,n B)Area a,b C)Call Area(m,n) D)Call Area a,b 12.给定日期DD,可以计算该日期当月最大天数的正确表达式是

A)Day(DD)

B)Day(DateSerial(Year(DD),Month(DD),Day(DD)))

C)Day(DateSerial(Year(DD),Month(DD),0))

D)Day(DateSerial(Year(DD),Month(DD)+1,0)

13.下列关于宏和模块的叙述中,正确的是

A)模块是能够被程序调用的函数

B)通过定义宏可以选择或更新数据

C)宏或模块都不能是窗体或报表上的事件代码

D)宏可以是独立的数据库对象,可以提供独立的操作动作

14.有如下VBA代码,运行结束后,变量n的值是

n=0

For i=1 TO 3

Forj=-4 To -1

n=n+1

Nextj

Next i

A)0 B)3 C)4 D)12

15.假设有如下Sub过程:

Sub sfun(x As Single,Y As Single)

t=x

x=t/y

y=t mod y ‘mod求余计算例7 mod 4 =3 End Sub

在窗体中添加一个命令按钮(名为Comnndl),编写如下事件过程

Private Sub Commandl_Click()

Dim a As SinSle

Dim b As SinSle

a=5:b=4

sfun(a,b) ‘原书有错,改为:sfun a,b或call sfun(a,b) MsgBox a & chr(10) + chr(13) & b ‘chr(数值)的功能返回数值对应的字母End Sub ‘chr(10)=’返回1个换行符

?????‘chr(13)=’返回一个空格符号注意:a → x ; b → y 是按地址传递的,因此不能写成sfun 5,4

chr与Asc互逆例asc(a)=97 ; chr(97)=a asc(chr(97))=97

打开窗体运行后,单击命令按钮,消息框中有两行输出,内容分别为

A)1和1 B)1.25和l C)1.25和4 D)5和4

16.有如下VBA程序段:

sum=0

n=0

For i=1 TO 5

x=n/i

n=n+1

slim=sum

Next i

以上For循环计算sum,完成的表达式是

A)1+1/1+2/3+3/4+4/5 B)1+1/2+1/3+1/4+1/5

C)1/2+2/3+3/4+4/5 D)1/2+1/3+1/4+1/5

17.在窗体中有一个命令按钮runl6,对应的事件代码如下:

Private Sub runl6_Enter()

Dim num As Integer

Dim a As Integer

Dim b As Integer .

Dim i As Integer

For i=1 To 10

num=InputBox("请输入数据:","输入",1)

if Int(num/2)=num/2 Then ‘Int取整函数例int(3.5)=3

a=a+1

Else

b=b+1

End lf

Next I

MsgBox("运行结果:a="& Str(a) & ",b=" & Str(b))

End Sub ‘str(123)=”123”将123转换成字符串

与val互逆。例:Val(str(123))=123 运行以上事件所完成的功能是

A)对输入的10个数据求累加和

B)对输入的10个数据求各自的余数,然后再进行累加

c)对输入的10个数据求分别统计有几个是整数,有几个是非整数

D)对输人的10个数据求分别统计有几个是奇数,有几个是偶数

二、填空题(1~25)(p4—p6)

1.VBA的全称是Visual Basic for Application。

2.模块包含了一个声明区域和一个或多个子过程(以Sub开头)或函数过程(以

Function开头)。

3. 说明变量最常用的方法,是使用Dim … As …结构.

4.VBA中变量作用域分为3个层次,这3个层次是局部变量、模块变量和全局变量。

5.在模块的说明区域中,用private关键字说明的变量是模块范围的变量;而用

public或Global键字说明的变量是属于全局范围的变量。

6.要在程序或函数的实例间保留局部变量的值,可以用Static关键字代替Dim。

7.用户定义的数据类型可以用Type…Type End关键字间说明。

8.VBA的3种流程控制结构是顺序结构、选择结构和循环结构。

9.VBA中使用的3种选择函数是IIf、Switch和Choose。

10.VBA提供了多个用于数据验证的函数。其中IsDate函数用于合法日期验证;

IsNumeric函数用于判定输入数据是否为数值。

11.VBA的有参过程定义,形参用ByVal说明,表明该形参为传值调用;形参用ByRef

说明,表明该形参为传址调用.

12.VBA的错误处理主要使用On Error语句结构。

13.On Error Goto 0语句的含义是取消错误处理。

14.On Error Resume Next语句的含义是忽略错误并执行下一条语句。

15.VBA语言中,函数lnputBox的功能是输入数据对话框;Msgbos函数的功能是

显示消息信息。

16.在VBA中双精度的类型标识是Double。

17.在VBA中,分支结构根据条件(或条件表达式)选择执行不同的程序语句。18.VBA的逻辑值在表达式当中进行算术运算时,True值被当作-1、False值被当作0来处理。

19.VBA编程中,要得到[15,75]上的随机整数可以用表达式Int(15+61*Rnd). 20.设有如下代码:

X=1

Do

x=x+2

Loop Until x=7 (或x>=7 或 x>6)

运行程序,要求循环体执行3次后结束循环,请在空白处填入适当的语句

21.设有以下窗体单击事件过程:

Private Sub Form_Click()

a=1

for i=1 to 3

Select Case i

Case 1,3

a=a+1

Case 2,4

a=a+2

end Select

Next i

MsgBox a

End Sub

打开窗体运行后,单击窗体,则消息框的输出内容是5。

22.在窗体中添加一个命令按钮(名为Commandl)和一个文本框(名为Textl),编写事件代码如下

Private Sub Commandl Click()

Dim a As Integer,y As Integer

x=5:y=7:z=0

Me!Textl=" "

Call Pl(x,x,z)

Me!Textl=z

End Sub

Private p1(a As Integer,b As Integer,c As Integer)

c=a+b

End Sub

打开窗体后,单击命令按钮,文本框中显示的内容是12

23.在下面的VBA程序段运行时,内层循环的循环次数是9

For m=0 To 7 Step 3

For n = m-1 To m+1

Next n

Next m

24.在窗体中使用一个文本框(名为numl)接受输入值,有一个命令按钮run,单击事件代码如下

Private Subrun_Click()

If Me!num1>=60 Then

Result="及格"

Else If Me!numl>70 Then

Result="通过"

Else If Me!numl>85 Then

Result="合格"

End Sub

打开窗体后,若通过文本框输入的值为85,单击命令按钮,输出结果是及格。25.在窗体中有一个名为Command25的命令按钮,Click事件代码如下。该事件的完整功能是:接受从键盘输入的10个大于0的整数,找出其中的最大值和对应的输入位置。请依据上述功能要求将程序补充完整。

Private Sub Command25_Click()

Max=0

max_n=0

For i=l To 10

num=Val(InputBox("请输入第"& i &"个大于0的整数:"))

If num>max Then

max=num

max_n=i

End If

Next i

MsgBox("最大值为第" & max_n & "个输入的" & max)

End Sub

第二部分(数据库编程<习题9>)(p7~p13)

一、选择题(1~9)(p7---p8)

1.以下内容中不属VBA提供的数据验证函数是

A)IsNull B)IsDate C)lsNumeric D)IsText

2.VBA"定时”操作中,需要设置窗体的“计时器间隔(TimerInterval)”属性值。其计量单位是

A)微秒B)毫秒 C)秒 D)分钟

3.能够实现从指定记录集里检索特定字段值的函数是

A)Nz B)DSum C)Rnd D)DLookup

4.DAO模型层次中处在最顶层的对象是

A)DBEngine B)Workspace C)Database D)RecordSet

5.ADO对象模型中可以打开RecordSet对象的是

A)只能是Connection对象B)只能是Command对象

C)可以是Connection对象和Command对象 D)不存在

6.InputBox函数返回值的类型为

A)数值 B)字符串(错误)注意:正确答案为D)

C)变体D)数值或字符串(视输入的数据而定)InputBox$ 返回字符串

InputBox 返回数值或字符串7.ADO的含义是

A)开放数据库互连应用编程接12 B)数据库访问对象

C)动态链接库D)Active数据对象

8.执行下面的语句后,所弹出的信息框外观样式为

MsgBox"AAAA",vbOKCancel+vbQuestion,"BBBB"

注:vbQuestion等价于32

9.

在MsgBox(prompt ,

buttons ,

title ,

hetpfite ,context

)函数调用形式中必须提供的参数是

A)prompt B)buttons C)title D)context 二、填空题(1~18)(p8---p13):

1.VBA 提供了多个用于数据验证的函数。其中IsDate 函数用于合法日期验证;IsNumeric 函数用于判定输入数据是否为数值。

2. VBA 语言中,函数InputBox 的功能是输入数据对话框;Msgbox 函数的功能是显示消息信息。

3.VBA 的“定时”操作功能是通过窗体的定时(Timer)事件过程完成。 4.VBA 中打开窗体的命令语句是DoCmd.OpenForm 。

5.Access 的窗体或报表事件可以有两种方法来响应:宏对象和事件过程。 6.窗体的计时器触发事件激发的时间间隔是通过计时器间隔(或interval)属性来设置。

7.窗体中有两个命令按钮:“显示”(控件名为cmdDisplay)和“测试”(控件名为cmdTest)。当单击“测试”按钮时,执行的事件功能是:首先弹出消息框,若点击其中的“确定”按钮,则隐藏窗体上的“显示”按钮;否则直接返回到窗体中。请填空补充完整(见227)。

Private Sub cmdtest_Click()

Textl)、一个标签及两个命令按钮(一个标题为Start,命

名为Commandl;另一个标题为Stop,命名为Command2)

组成。程序功能为:打开窗体运行后,单击“Start'’按

钮,则开始计时,文本框中显示秒数;单击“Stop”按钮,

则计时停止;双击“Stop”按钮,则退出。请填空补充完

整。

Dim i as integer

Private Sub Commandl Click( )

i=0

Me.TimerInterval=1000

End Sub

Private Sub Command2_Click( )

Me.TimerInterval=0

End Sub

Private Sub Command2_DblClick(Cancel As Integer) DoCmd.Close

End Sub

Private Sub Form_Load( )

Me.TimerInterval=0

Me!Text1=0

End Sub

Private Sub Form_Timer( )

10.VBA中主要提供了三种数据库访问接口:ODBC API、DAO、ADO。

11.DAO对象模型采用分层结构,其中位于最顶层的对象是DBEngine。12.Access的VBA编程操作本地数据库时,提供一种DAO数据库打开的快捷方式是CurrentDB().也提供一种ADO的默认连接对象是CurrentProject.Connection 13.DAO模型中,主要的控制对象有DBEngine、Workspace 、Database、 RecordSet Field和Error。

14.ADO对象模型主要有Connection、 Command 、RecordSet、 Field,而相应QueryDef和Error 5个对象。

15.已知一个为“学生”的Access数据库,库中的表“stud"存储学生的基本情况信息,包括学号、姓名、性别和籍贯。下面程序的功能是:通过窗体向stud表中添加学生记录。对应“学号”、“姓名”、“性别”和“籍贯”的4个文本框的名称分别为:tNo、tName、tSex和tRes。当点击窗体上的“增加”命令按钮(名称为Commandl)时,首先判断学号是否重复,如果不重复则向“stud"表中添加学生记录;如果学号重复,则给出提示信息。当点击窗体上的“退出”命令按钮(名称为Command2)时,关闭当前窗体。

依据要求功能,请将以下程序补充完整。

Private Sub Form_Load()

‘打开窗口时,连接Access数据库

Set ADOcn=CurrentProject.Connention

End Sub

Dim ADOcn As New ADODB.Connection

Private Sub Commandl Click()

‘增加学生记录

Dim strSQL As String

弹出提示“是否删除该记录?”,单击“是”,则直接删除该当前记录;单击“否”,则什么都不做。其效果图如下:

其效果图如下:

代码如下:

Dim strTemp AsString ’存放原始文本框选择文本

’单击“复制”按钮,实施复制操作

PrivateSub tCopy_Click( )

Me!tDestText:Nz(Me!tDestText)十strTemp

strTemp =””

If Len(Me!tDestText)>50 Then Me!tDestText=Null

End Sub

’原始文本框接受英文大小字母和汉字输入

Private Sub tSourceText_KeyPress(KeyAscii AsInteger)

If(KeyAscii>=Ase("A") And KeyAscii<=Ase("Z")) Or (KeyAscii >=Asc("a") And KeyAscii<=Asc("2")) Then

Else

’输入其他字符,忽略

KeyAscii=0

End If

End Sub

’返回原始文本框选择文本

Private Sub tSourceText LostFocus( )

If Me!tSourceText.SelLength>0 Then

strTemp = Me!tSourceText.SelText

(或Mid(Me!tSourceText, Me!tSourceText.SelStart+1, Me!tSourceText.SelLength)) Else

strTemp=""

End If

End Sub

18.Nz函数主要用于处理Null值时的情况;Dlookup函数的功用是从指定记录集里检索特定字段的值。

第三部分(经典题解)(p14~p37)

一、选择题(1~33)

1.假定有以下循环结构(2005年9月)

Do Until条件

循环体

Loop

则正确的叙述是。

A)如果“条件”值为0,则一次循环体也不执行

B)如果“条件”值为0,则至少执行一次循环体

C)如果“条件”值不为0,则至少执行一次循环体

D)不论“条件”是否为“真”,至少要执行一次循环体

解析:Do…Until。..Loop循环结构中,当条件值为假时,重复执行循环体,直至条件值为真,结束循环。因此,如果条件值为0,则至少执行一次循环体。2.窗体上添加有3个命令按钮,分别命名为Commandl、Command2和Command3。编写Commandl的单击事件过程,完成的功能为:当单击按钮Commandl时,按钮Command2可用,按钮Command3不可见。以下正确的是。(2005年9月)

A)Private Sub Commandl_Click()

Command2.Visible=True

Command3.Visible=False

End Sub

B)PrivateSub Commandl_Click()

Command2.Enabled=true

Command3.Enabled=False

End Sub

C)Private Sub Commandl_Click()

Command2.Enabled=True

Command3.Visible=False

End Sub

D)Private SubCommandl_Click()

Command2.Visible=True

Command3.Enabled=False

End Sub

解析:Enabled属性用于判断控件是否可用,而Visible属性用于判断控件是

否可见。题目中要求Command2可用,而Command3不可见,则必须设置Command2的Enabled为True,并且设置Command3的Visible为False

3.假定有以下程序段:(2005年9月)

n=0

for i=1 to 3

forj=-4 to -1

n=n+1

next j

next i

运行完毕后,n的值是

A) 0 B) 3 C) 4 D) 12

解析:本题中,外层循环从1到3,要执行3次,而内层循环从-4到-1,执行4次,所以一共执行了4*3=12次循环。而每执行一次循环n就加1,所以最后n的值为12。

4.下列逻辑表达式中,能正确表示条件“x和Y都是奇数”的是。(2005年9月) A) x Mod 2=1 Or y Mod 2=1 B) x Mod 2=0 Or y Mod 2=0

C)x Mod 2=1 And y Mod 2=1 D)x Mod 2=0 And y Mod 2=0

解析:要使x和y都是奇数,则x和y除以2的余数都必须是1。

5.VBA程序的多条语句可以写在一行中,其分隔符必须使用符号。(2006年4月)

A): B)’ C); D),

解析:VBA程序在一行上写多个语句时用冒号“:”作分隔符.

6.VBA表达式3*3\3/3的输出结果是。(2006年4月)

A) 0 B) 1 C) 3 D) 9

解析:VBA的表达式运算符优先级顺序“*”和“/”高于“\”。此表达式先计算3*3=9和3/3=1,最后计算9\1=9。

7.现有一个已经建好的窗体,窗体中有一个命令按钮,单击此按钮,将打开tEmployee表,如果采用VBA代码完成,下面语句正确的是。(2006年4月)

A)docmd.openform"tEmployee" B)docmd.openview"tEmployee"

C)docmd.Opentable"tEmployee" D)docmd.Openreport"tEmployee"

解析:docmd.openform使用openForm操作,可以从“窗体”视图、窗体“设计”视图、“打印预览”或“数据表”视图中打开一个窗体,可以选择窗体的数据

输入与窗体数据输出方式并限制窗体所显示的记录。

Docmd.openview可以使用openview操作在“数据表”视图、视图“设计”视图或打印预览中打开视图。当在“数据表”视图中打开视图时,该操作运行此命名的视图。可以选择该视图的数据项,并可限制视图显示的记录数。

Docmd.openrepot使用OpenReport操作,可以在“设计”视图或“打印预览”中打开报表或立即打印报表,也可以限制需要在报表中打印的记录。

Docmd.opentable使用OPentable操作,可以在“数据表”视图、“设计”视图或打印预览中打开表,也可以选择表的数据输入方式。

8.Access的控件对象可以设置某个属性来控制对象是否可用(不可用时显示为灰色状态),需要设置的属性是一。(2006年4月)

A)Default B)Cancel C)Enabled D)Visible

解析:Default为命令按钮确定属性,只有命令按钮支持此属性。

Cancel为取消功能属性。

Enabled决定控件是否允许操作。

Visible决定控件是否可见。

9.如果加载一个窗体,先被触发的事件是。(2006年4月)

A)Load事件 B)Open事件 C)Click事件 D)Dalick事件

解析:Access加载窗体是运行指定的宏或用户定义的事件过程,然后显示窗体的记录。可以使用Load事件过程设置窗体或控件中的值,也可以设置窗体或控件的属性。Load事件发生在Open事件后及Resize事件前,不能被取消。Click事件发生在窗体单击时,没有Ddelick事件。

10.以下程序段运行结束后,变量x的值为_____。(2006年4月)

x=2

y=4

DO

x=x*y

y=y+1

Loop While y<4

A) 2 B) 4 C) 8 D) 20

解析:定义两个变量x=2、y=4,执行Do后的循环体语句:x=x*y=2*4=8;y=y+1=4+l=5;此时y:5,while语句为假退出循环。由于执行了一次循环,所以

x=8。

11.在窗体上添加一个命令按钮(名为Commandl),然后编写如下事件过程:(2006年4月)

Private Sub Commandl_Click( )

For i=1 To 4

x=4

Forj=1 To 3

x=3

For k=1 T0 2

x=x+6

Next k

Nextj

Next i

MsgBox x

End Sub

打开窗体后,单击命令按钮,消息框的输出结果是。

A)7 B)15 C)157 D)538

解析:此题中应用三重嵌套循环,循环嵌套的执行,当外层循环执行一次,内层就要执行所有的循环:

第一个for语句对变量x赋值,x=4;

第二个for语句对变量x赋值,x=3;

第三个for语句对变最x赋值,x=x+6。当i=1时,j=1,k执行其内部的两次循环,此时x赋值为3,当k=1时,x=x+6=3+6=9:k=2时,x=x+6=96=15。退出内循环到第二个for语句执行其剩余的循环,i=1、j=2时,k依旧执行其内部的两次循环,此后x还是等于15。i=1、j=3时,因为第三个for语句始终对x的赋值为15,所以运算结果x始终等于15。第二层循环完成后退回到第一层,执行其剩余的循环,步骤同上,因此x=15。

12.假定有如下的Sub过程:(2006年4月)

Sub sfun(x As Single,y As Single)

t=x

x=t/y

y=t Mod y

End Sub

在窗体上添加一个命令按钮(名为Commandl),然后编写如下事件过程:

Private Sub Commandl_Click()

Dim a as single

Dim b as single

a=5

b=4

sfun a,b

MsgBox a & chr(10)+chr(13) & b

End Sub

打开窗体运行后,单击命令按钮,消息框的两行输出内容分别为。

A)1和1 B)1.25和1 C)1.25和4 D)5和4

解析:此题中设置了一个sfun()函数,进行除法运算和求模运算,为命令按钮(名为Commandl)编写事件,定义两变量a=5、b=4;调用此函数传递a、b的值给x、Y进行运算,t=x=5、y=4;x:t/y;x=5/4=1.25(除法运算);Y=t Mod y=5 mod 4=1(求模运算)。

13.Sub过程与Function过程最根本的区别是。(2006年9月)

A)Sub过程的过程名不能返回值,而Function过程能通过过程名返回值

B)Sub过程可以使用Call语句或直接使用过程名调用,而Function过程不可以

C)两种过程参数的传递方式不同

D)Function过程可以有参数,Sub过程不可以

解析:过程是模块的单元组成,分为两种类型:Sub过程和Function函数过程。VBA提供的关键字CALL,可显示调用一个子过程(Sub过程),但却不能调用执行函数过程(Function过程),此外Sub过程和Function过程都可以直接引用过程名来调用,因此选项B错误。Sub过程可以使用参数(由调用过程传递的常数、变量或表达式),所以选项D错误。选项C要视具体情况才能确定。Sub过程执行操作但不返回值,Function过程可以返回值,这也是过程最根本的区别,所以选项A是正确的。

14.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006年9月)

PrivateSubCommandl_Click()

A=0:b=5:c=6

MsgBox a=b+c

End Sub

打开窗体运行后,如果单击命令按钮,则消息框的输出结果是。

A) 11 B) a=11 C) 0 D) False

解析:程序中“MsgBox a=b+c”表示在消息框中显示a与b+c的值比较的结果,由“a=0:b=5:c=6”可知,0!=11,所以消息框的输出结果为False。

15.在窗体中添加一个命令按钮(名称为Command1),然后编写如下代码:(2006年9月)

Private Sub Commandl_Click( )

Dim a(10,10)

For m=2 TO 4

For n=4 TO 5

a(m,n)=m*n

Next n

Next m

MsgBox a(2,5)+a(3,4)+a(4,5)

End Sub

打开窗体运行后,单击命令按钮,则消息框的输出结果是。

A) 22 B) 32 C) 42 D) 52

解析:根据程序,a(2,5)+a(3,4)+a(4,5)=2*5+3*4+4*5=42

16.在窗体中添加一个命令按钮(名为Commandl)和一个文本框(名为Textl),并在命令按钮中编写如下事例代码:(2006年9月)

Private Sub Commandl_Click()

m=2.17 ‘Len(“abc”)=3

n=Len(Str$(m)+Space(5)) ‘Str$(2.17)=”□2.17”

Me.Textl=n ‘Space(5)=”□□□□□”

End Sub

打开窗体运行后,单击命令按钮,在文本框中显示。

A) 5 B) 8 C) 9 D) 10

解析:程序中“n=Len(Str$(m)+Space(5))”的含义是算出字符串总长度,当把正数转换成字符串时,Str$函数在字符串前面留有一个空格,Space(数值表达式)返回由数值表达式确定的空格个数组成的空字符串。Str$(m)表5个字符串,Space(5)表示5个字符串,所以n等于10。

17.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006年9月)

Private Sub Commandl_Click( )

A=75

If A>60 Then I=1

If A>70 Then I=2

If A>80 Then I=3

1f A>90 Then I=4

MsgBox I

End Sub

打开窗体运行后,单击命令按钮,则消息框的输出结果是。

A)1 B)2 C)3 D)4

解析:if条件表达式1 Then条件表达式1为真时要执的语句序列。在程序中,A=75,即A)70,执行 IfA)70 Then I=2,所以I=2。

18.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006年9月)

Private Sub Commandl_Click( )

s="ABBACDDCBA"

For I=6 To 2 Step -2

x=Mid(s,I,I)

y=Left(s,I)

z=Right(s,I)

z=x & y & z

Next I

MsgBox z

End Sub

窗体打开运行后,单击命令按钮,则消息框的输出结果是。

A)AABAAB B)ABBABA C)BABBA D)BBABBA

解析:Mid(字符表达式,数值表达式1,数值表达式2):返回一个值,该值是从字符表达式最左端某个字符开始,截取到某个字符为止的若干个字符。其中,数值表达式1的值是开始的字符位置,数值表达式2是终止的字符个数。

Left(字符表达式,数值表达式):返回一个值,该值是从字符表达式左侧第1个字符开始截取的若干字符。其中,字符字数是数值达式的值。

Right(字符表达式,数值表达式):返回一个值,该值是从字符表达式右侧第1个字符开始截取的若干字符。其中,字符字数是数值表达式的值。

For循环运行三次,最后一次循环结束,x="BB",y="AB",z="BBABBA"。

19.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006

Excel VBA循环语句

l For… next for i=初始值 to 结束值 step 步长值 …… next 具体解释一下,初始值指的是循环开始的值,结束值指的是循环结束的值,实质上就是i值得一个判断,如果i值在起始值和结束值之间,那么进入循环语句,然后i值每运行到next语句后会自动加一个步长值,直至i值超出了初始值到结束值这个范围,循环才会结束。这里要说明一下”step 步长值“往往是省略掉的,省略掉的话,步长取默认值为1。下面将以一段小实例来具体说明这个结构的用法: 实例:在sheet1工作表中一次输出1到10这个数,显示在第一列中。 Sub 循环语句() Dim i As Integer For i = 1 To 10 Step 2 Cells(i, 1) =i Next End Sub Sub 循环语句() Dim i As Integer For i = 10 To 1 Step -1 Cells(i, 1) =i Next End Sub l For each… next For each 对象变量 in 对象集合 …… next 具体解释一下,这里我们看到和上一个结构的而不同的是上面一种结构主要是数值变量,而这种结构是对象变量。什么意思呢?each……in指的是在这个对象集合里面,一次将每一个对象都遍历一边。同样的道理,执行到next后对象自动指到下一个。具体我们来看一下下面的一个实例吧 实例:给一个数据区域内的所有单元格赋值,从1开始。 Sub 循环语句() Dim i As Integer For Each c In Range("a1:c5") i = i + 1 c.Value = i Next End Sub

Excel VBA实例教程 #056:遍历工作表中的图形

工作表中的多个图形,如果使用系统缺省名称,如“文本框1”、“文本框2”这样前面是固定的字符串,后面是序号的,可以使用For...Next 语句遍历图形,如下面的代码所示。 1.Sub ErgShapes_1() 2. Dim i As Integer 3. For i = 1 To 4 4. Sheet1.Shapes("文本框 " & i).TextFrame.Characters.Text = "" 5. Next 6.End Sub 代码解析: ErgShapes_1过程清除工作表中四个图形文本框中的文字。 第3行到第5行代码,使用Shapes属性在工作表上的三个图形文本框中循环。 Shapes属性返回Shapes对象,代表工作表或图形工作表上的所有图形,可以使用Shapes(index)返回单个的Shape对象,其中index是图形的名称或索引号。 返回单个的Shape对象后使用TextFrame 属性和Characters方法清除文本框中的字符,关于Shape对象的TextFrame 属性和Characters方法请参阅技巧53 。 如果图形的名称没有规律,可以使用For Each...Next 语句循环遍历所有图形,根据Type属性返回的图形类型进行相应的操作,如下面的代码所示。 1.Sub ErgShapes_2() 2. Dim myShape As Shape 3. Dim i As Integer 4. i = 1 5. For Each myShape In Sheet1.Shapes 6. If myShape.Type = msoTextBox Then 7. myShape.TextFrame.Characters.Text = "这是第" & i & "个文本框" 8. i = i + 1 9. End If 10. Next 11.End Sub 代码解析: ErgShapes_2过程在工作表中的所有图形文本框中写入文本。 第5行代码使用For Each...Next 语句循环遍历工作表中所有的图形对象。 第6行到第9行代码如果图形对象是文本框则在文本框中写入文本。其中第6行代码根据Type属性判断图形对象是否为文本框,应用于Shape对象的Type属性返回或设置图形类型,MsoShapeType类型,请参阅表格54 1 。

ExcelVBA中for循环语句地用法

Excel VBA中for循环语句的用法 听语音 ? ?| ?浏览:21306 ?| ?更新:2015-05-30 16:57 ?| ?标签:excel ?1 ?2 ?3 ?4 ?5 ?6 分步阅读 for循环语句在VBA中扮演着比较重要的角色,为我们批量的处理表格数据提供了一个很好的途径,下面小编根据自己的一些亲身经验为大家分享一下Excel VBA中for循环语句的两个用法吧!

?office Excel软件 ?具备一定的VB基础更好 1. 1 我们常用的for循环语句有两种,一个是for ……next结构;一个是For each……next结构。这两种结构主要都是针对多数据循环遍历的时候用到的。 那么下面我将分别来介绍一下两种循环结构的具体用法,首先还是要打开VBA编辑器 2. 2 1.for……next结构 这个结构一般是这样的: for i=初始值to 结束值step 步长值 ……

next 具体解释一下,初始值指的是循环开始的值,结束值指的是循环结束的值,实质上就是i值得一个判断,如果i值在起始值和结束值之间,那么进入循环语句,然后i值每运行到next语句后会自动加一个步长值,直至i值超出了初始值到结束值这个围,循环才会结束。这里要说明一下”step 步长值“往往是省略掉的,省略掉的话,步长取默认值为1。下面将以一段小实例来具体说明这个结构的用法: 实例:在sheet1工作表中一次输出1到10这个数,显示在第一列中。 程序: Sub 循环语句() Dim i As Integer For i = 1 To 10 Cells(i, 1) = i Next End Sub

Excel VBA常用技巧代码

1.删除重复行 (1) 2.ActiveX控件的相关操作 (2) 3.单元格内容匹配 (2) 4.单元格填充公式 (3) 5.弹出打开对话框 (3) 6.操作文件夹下的所有工作簿 (3) 7.获取数据区域的最后一行和最后一列 (4) 8.获取列的字母顺序[A~IV] (4) 9.自定义函数返回数组并填充至单元格区域 (4) 10.绘制曲线图 (5) 11.单元格区域拷贝 (6) 12.操纵数据库(查、增、删、改) (6) 13.待定XX (7) 1.删除重复行 关键字:[a65536].End(xlUp).Row、Offset()、相关双层循环 Sub RemoveDuplicate() '删除重复行 For i = [a65536].End(xlUp).Row - 1 To 1 Step -1 '按倒叙删除 For j = [a65536].End(xlUp).Row To i + 1 Step -1 If Cells(i, 1).Value = Cells(j, 1).Value Then Rows(i).Delete End If Next Next End Sub Sub RemoveItem() '删除相邻重复,但不删除隔行重复 Dim i As Long With Range("A2") '以A2为基准进行单元格偏移 Do While .Offset(i, 0) If .Offset(i, 0).Value = .Offset(i - 1, 0).Value Then .Offset(i, 0).EntireRow.Delete i = i + 1 Loop End With End Sub

VBA文件及文件夹操作

VBA文件及文件夹操作 1.VBA操作文件及文件夹 on error resume next下测试 A,在D:\下新建文件夹,命名为folder 方法1:MkDir "D:\folder" 方法2:Set abc = CreateObject("Scripting.FileSystemObject") abc.CreateFolder ("D:\folder") B,新建2个文件命名为a.xls和b.xls Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:\folder\a.xls" ActiveWorkbook.SaveAs Filename:="D:\folder\b.xls" C,创建新文件夹folder1并把a.xls复制到新文件夹重新命名为c.xls MkDir "D:\folder1" FileCopy "D:\folder\a.xls", "D:\folder1\c.xls" D,复制folder中所有文件到folder1 Set qqq = CreateObject("Scripting.FileSystemObject") qqq.CopyFolder "D:\folder", "D:\folder1" D,重命名a.xls为d.xls name "d:\folder1\a.xls" as "d:\folder1\d.xls" E,判断文件及文件夹是否存在 Set yyy = CreateObject("Scripting.FileSystemObject")

If yyy.FolderExists("D:\folder1) = True Then ... If yyy.FileExists("D:\folder1\d.xls) = True Then ... F,打开folder1中所有文件 Set rrr = CreateObject("Scripting.FileSystemObject") Set r = rrr.GetFolder("d:\folder1") For Each i In r.Files Workbooks.Open Filename:=("d:\folder1\" + https://www.wendangku.net/doc/7318936215.html, + "") Next G,删除文件c.xls kill "d:\folder1\c.xls" H,删除文件夹folder Set aaa = CreateObject("Scripting.FileSystemObject") aaa.DeleteFolder "d:\folder" 2.8excel vba一次性获取文件夹下的所有文件名的方法 小生今天上网下载了一个财务常用报表的文件包,里面有几百个excel工作表,要是手工一个一个的获得文件名的话,那我可是要忙十天半月哦。于是想到昨论坛就是vba论坛,昨不充分利用excel 自身的高级应用呀,呵呵,实现的代码如下,把工作量几天的任务可是一下子就完成了,这就是excel vba 给你工作提高效率的结果! excle vba自动获取同一文件夹下所有工作表的名称红色代码: 按Alt+F11,打开VBA编辑器,插入一个模块,把下面的代码贴进去,按F5执行 Sub t() Dim s As FileSearch '定义一个文件搜索对象

Excel VBA编程 For Each...Next

Excel VBA编程For Each...Next For Each…Next语句会重复一个语句块,而它是作用于集合中的每个对象或是数组中的每个元素。当循环执行一次则Visual Basic会自动设置一个变量。 语法: For Each element In group [statements] [Exit For] [statements] Next [element] 在该语句中,主要包含3个参数,其功能如下: ●element 必要参数。用来遍历集合或数组中所有元素的变量。对于集合来说,element可能是一 个Variant变量、一个通用对象变量或任何特殊对象变量。对于数组而言,element只能是一个 Variant变量。 ●group 必要参数。表示对象集合或数组的名称(用户定义类型的数组除外)。 ●statements 可选参数,针对group中的每一项执行的一条或多条语句。 Dim s(2) s(0) = "000000": s(1) = "1111111": s(2) = "222222222" For Each f In s MsgBox f Next 在使用For Each...Next语句过程中,应注意以下几点内容: ●如果集合中至少有一个元素,就会进入For…Each块执行。一旦进入循环,便先针对group中第 一个元素执行循环中的所有语句。如果group中还有其它的元素,则会针对它们执行循环中的语 句,当group中的所有元素都执行完了,便会退出循环,然后从Next语句之后的语句继续执行。 ●在循环中可以在任何位置放置任意个Exit For语句,随时退出循环。 ●可以将一个For…Each…Next循环放在另一个之中来组成嵌套式For…Each…Next 循环。但是每 个循环的element必须是唯一的。

用vba遍历文件夹和子文件夹中的所有文件

在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth 对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助 第二种方法:引用FileSystemObject对象 注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中 代码及注释: Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称 Dim cntFiles% '文件个数 Public Sub ListAllFiles() Dim strPath$ '声明文件路径 Dim i% 'Set fso = CreateObject("Scripting.FileSystemObject") Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象 strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录 cntFiles = 0 Set fd = fso.GetFolder(strPath) '设置fd文件夹对象 SearchFiles fd '调用子程序查搜索文件 Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中 End Sub Sub SearchFiles(ByVal fd As Folder) Dim fl As File Dim sfd As Folder For Each fl In fd.Files '通过循环把文件逐个放在数组内 cntFiles = cntFiles + 1 ArrFiles(cntFiles) = fl.Path Next fl If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合 For Each sfd In fd.SubFolders '在Folders 集合进行循环查找 SearchFiles sfd '使用递归方法查找下一个文件夹 Next End Sub

VBA遍历所有文件夹的两种方法(filesearch和FileSystemObject)

VBA遍历所有文件夹的两种方法(filesearch和FileSystemObject) 在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助 第一种方法:使用filesearch对象 Sub mysearch() Dim fs, i, arr(1 To 10000) Set fs = Application.FileSearch '设置一个搜索对象 With fs .LookIn = ThisWorkbook.Path & "/" '设置搜索路径 .Filename = "*.xls" '要搜索文件名和类型 .SearchSubFolders = True '是否需要搜索子文件夹 If .Execute > 0 Then '如果找不到文件 MsgBox "There were " & .FoundFiles.Count & _ " file(s) found." '显示文件找不到 For i = 1 To .FoundFiles.Count '通过循环把所有搜索到的文件存入到数组中 arr(i) = .FoundFiles(i) Next i Sheets(1).Range("A1").Resize(.FoundFiles.Count) = Application.Transpose(arr) ' '把数组内的路径和文件名放在单元格中 Else MsgBox "There were no files found." End If End With End Sub 第二种方法:引用FileSystemObject对象 注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中 代码及注释: Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称 Dim cntFiles% '文件个数 Public Sub ListAllFiles() Dim strPath$ '声明文件路径 Dim i% 'Set fso = CreateObject("Scripting.FileSystemObject") Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象 strPath = ThisWorkbook.Path & "/" '"设置要遍历的文件夹目录 cntFiles = 0 Set fd = fso.GetFolder(strPath) '设置fd文件夹对象 SearchFiles fd '调用子程序查搜索文件 Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中 End Sub Sub SearchFiles(ByVal fd As Folder) Dim fl As File Dim sfd As Folder For Each fl In fd.Files '通过循环把文件逐个放在数组内 cntFiles = cntFiles + 1 ArrFiles(cntFiles) = fl.Path Next fl If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合 For Each sfd In fd.SubFolders '在Folders 集合进行循环查找 SearchFiles sfd '使用递归方法查找下一个文件夹 Next End Sub

excel_vba数据遍历提取

Public effectarea_mark As Integer Public itemsource_position_x As Integer '源项目名称所在行 Public itemsource_position_y As Integer '源项目名称所在列 Public casesource_position_x As Integer '源工况名称所在行 Public casesource_position_y As Integer '源工况名称所在列 Public item_position_x As Integer '目标项目名称所在行 Public item_position_y As Integer '目标项目名称所在行 Public case_position_x As Integer '目标工况名称所在列 Public case_position_y As Integer '目标工况名称所在列 Public itemsource_position_x_start As Integer '源项目名称所在行起始位置Public itemsource_position_y_start As Integer '源项目名称所在列起始位置Public casesource_position_x_start As Integer '源工况名称所在行起始位置Public casesource_position_y_start As Integer '源工况名称所在列起始位置Public item_position_x_start As Integer '目标项目名称所在行起始位置Public item_position_y_start As Integer '目标项目名称所在行起始位置Public case_position_x_start As Integer '目标工况名称所在列起始位置Public case_position_y_start As Integer '目标工况名称所在列起始位置Public itemsource_position_x_max As Integer '源项目名称所在行终止位置Public itemsource_position_y_max As Integer '源项目名称所在列终止位置Public casesource_position_x_max As Integer '源工况名称所在行终止位置Public casesource_position_y_max As Integer '源工况名称所在列终止位置Public item_position_x_max As Integer '目标项目名称所在行终止位置Public item_position_y_max As Integer '目标项目名称所在行终止位置Public case_position_x_max As Integer '目标工况名称所在列终止位置

Excel VBA 工作薄工作表遍历循环

‘新建一个模块,将下面代码复制到模块中就可以实现再打开的Excel工作薄,工作表的循环 '通用模块 Sub 通用模块() Dim ABCD As Worksheet Dim BCDE As Workbook Application.ScreenUpdating = False ‘逐个工作薄循环, If MsgBox("是否在所有打开的工作薄中运行", vbInformation + vbYesNo + vbDefaultButton2, "BYD_Sensor") = vbNo Then GoTo ZCQ For Each BCDE In Workbooks BCDE.Activate For Each ABCD In Worksheets ABCD.Activate '逐个工作薄循环 '代码块 MsgBox "工作薄名称为:" & https://www.wendangku.net/doc/7318936215.html, & " 工作表名称为:" & https://www.wendangku.net/doc/7318936215.html, Next ABCD Next BCDE Exit Sub ZCQ: 当前工作薄循环 For Each ABCD In Worksheets ABCD.Activate '当前工作薄循环 '代码块

MsgBox "工作表名称为:" & https://www.wendangku.net/doc/7318936215.html, Next ABCD Application.ScreenUpdating = True End Sub ‘下面程序实将Excel图标保存到磁盘中,默认保存到我的文档‘图表保存为图片 Sub 图表保存为图片() If ActiveChart Is Nothing Then MsgBox "请选择需要复制的图表" Else ActiveChart.Export "mychart.JPG", "JPG" End If End Sub

用vba遍历文件夹和子文件夹中的所有文件

精品文档 在VBA遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用VBA的filesercth 对象,另外一种是使用FileSystemObject(windows文件管理工具)和递归方法。兰色对代码进行了注解,希望对大家有所帮助 第二种方法:引用FileSystemObject对象 注意:要使用FileSystemObject对象,需要首先引用一下,具体方法,VBE--工具--引用--找到miscrosoft scription runtime项目并选中 代码及注释: Dim ArrFiles(1 To 10000) '创建一个数组空间,用来存放文件名称 Dim cntFiles% '文件个数 Public Sub ListAllFiles() Dim strPath$ '声明文件路径 Dim i% 'Set fso = CreateObject("Scripting.FileSystemObject") Dim fso As New FileSystemObject, fd As Folder '创建一个FileSystemObject对象和一个文件夹对象 strPath = ThisWorkbook.Path & "\" '"设置要遍历的文件夹目录 cntFiles = 0 Set fd = fso.GetFolder(strPath) '设置fd文件夹对象 SearchFiles fd '调用子程序查搜索文件 Sheets(1).Range("A1").Resize(cntFiles) = Application.Transpose(ArrFiles) '把数组内的路径和文件名放在单元格中 End Sub Sub SearchFiles(ByVal fd As Folder) Dim fl As File Dim sfd As Folder For Each fl In fd.Files '通过循环把文件逐个放在数组内 cntFiles = cntFiles + 1 ArrFiles(cntFiles) = fl.Path Next fl If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的Folders 集合 For Each sfd In fd.SubFolders '在Folders 集合进行循环查找 SearchFiles sfd '使用递归方法查找下一个文件夹 Next End Sub .

VBA常用代码

1.遍历所有已打开的word文档 For Each docOpened In Documents …… Next docOpened 2.Word 将目录下所有文档转换为txt,并删除原文档 Sub 目录下doc转txt() '目录下所有word文档转为txt,并删除word文档 '保存在原目录 '遍历所有文件夹,把带路径的文件名存入字典 On Error Resume Next Dim Path As String, t 'Path为路径,t用于计算程序执行花费的时间 Set objshell = CreateObject("Shell.Application") Set objfolder = objshell.BrowseForFolder(0, "选择文件夹", 0, 0) If Not objfolder Is Nothing Then Path = objfolder.sel f.Path & "\" Set objfolder = Nothing Set objshell = Nothing '创建字典用于存储路径和文件名 Dim DicPath, DicFile, i As Integer, Ke, ContentName A s String, FileName As String, MsgTxt Set DicPath = CreateObject("Scripting.Dictionary")

Set DicFile = CreateObject("Scripting.Dictionary") DicPath.Add Path, "" i = 0 '存所有路径 Do While i < DicPath.count Ke = DicPath.keys ContentName = Dir(Ke(i), vbDirectory) Do While ContentName <> "" '若有子文件夹,则添加 '跳过当前的目录及上层目录 If ContentName <> "." And ContentName < > ".." Then If GetAttr(Ke(i) & ContentName) = vbDirectory Then DicPath.Add (Ke(i) & Conte ntName & "\"), "" End If End If ContentName = Dir Loop i = i + 1 Loop '存所有doc文件名 For Each Ke In DicPath.keys FileName = Dir(Ke & "*.doc")

VBA循环语句&判断语句

VBA循环语句 语句除了判断语句外,还有循环语句,有以下几种形式: 1、While...Wend 语句。语法: While condition [statements] Wend While...Wend 语句的语法具有以下几个部分: 部分描述 condition 必要参数。数值表达式或字符串表达式,其计算结果为True 或False。如果condition 为Null,则condition 会视为False。 statements 可选参数。一条或多条语句,当条件为True 时执行。 2、Do...Loop 语句。语法: Do [{While | Until} condition] [statements] [Exit Do] [statements] Loop 或者可以使用下面这种语法: Do [statements] [Exit Do] [statements] Loop [{While | Until} condition] Do Loop 语句的语法中的参数说明以上面相同,不重复了。 3、For...Next 语句。语法: For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter] For…Next 语句的语法具有以下几个部分: 部分描述 counter 必要参数。用做循环计数器的数值变量。这个变量不能是Boolean 或数组元素。 start 必要参数。counter 的初值。 End 必要参数,counter 的终值。 Step 可选参数。counter 的步长。如果没有指定,则step 的缺省值为1。 Statements 可选参数。放在For 和Next 之间的一条或多条语句,它们将被执行指定的次数。 4、For Each...Next 语句。语法 For Each element In group [statements] [Exit For] [statements] Next [element]

vba 常用功能20140209

一、获取工作表的行数 Dim iRows As Integer Dim iCols As Integer '获取工作表的行数 'https://www.wendangku.net/doc/7318936215.html,edRange.Rows '根据Sheet1获取 iRows = https://www.wendangku.net/doc/7318936215.html,edRange.Rows.Count iCols = https://www.wendangku.net/doc/7318936215.html,edRange.Columns.Count '根据表格名字获取 iRows = Sheets("Sheet2").UsedRange.Rows.Count iCols = Sheets("SSRdata").UsedRange.Columns.Count 二、创建字典 字典常用方法 方法说明 Add(key,item) 增加键/条目对到Dictionary Exists(key) 如果指定的键存在,返回True,否则返回False Items() 返回一个包含Dictionary对象中所有条目的数组 Keys() 返回一个包含Dictionary对象中所有键的数组 Remove(key) 删除一个指定的键/条目对 RemoveAll() 删除全部键/条目对 '创建字典 Set dict = CreateObject("Scripting.Dictionary") ‘判断字典是否存在 If dict.Exists(sType) Then '存在则面积累加 dict(sType) = CLng(dict(sType)) + iArea Else '不存在则存入面积

dict(sType) = iArea End If '遍历字典 For Each key In dict.keys Sheet2.Cells(iCurrRow, 1) = key Sheet2.Cells(iCurrRow, 2) = dict(key) iCurrRow = iCurrRow + 1 Next '测试字典个数 Set dict = CreateObject("Scripting.Dictionary") dict("1") = "1" dict("1") = "1" dict("1") = "1" dict("1") = "2" MsgBox (dict.Count & "_______" & dict("1")) '个数都是1个结果为2 即最后一个Exit Sub 三、将表格放在数组中 ‘定义数组 Dim arr arr = https://www.wendangku.net/doc/7318936215.html,edRange arr = Sheets("Sheet2").UsedRange ‘遍历数组 For i = 2 To UBound(arr) Next

EXCEL VBA 常见字典用法集锦及代码详解(全)

常见字典用法集锦及代码详解 前言 凡是上过学校的人都使用过字典,从新华字典、成语词典,到英汉字典以及各种各样数不胜数的专业字典,字典是上学必备的、经常查阅的工具书。有了它们,我们可以很方便的通过查找某个关键字,进而查到这个关键字的种种解释,非常快捷实用。 凡是上过EH论坛的想学习VBA里面字典用法的,几乎都看过研究过northwolves狼版主、oobird版主的有关字典的精华贴和经典代码。我也是从这里接触到和学习到字典的,在此,对他们表示深深的谢意,同时也对很多把字典用得出神入化的高手们致敬,从他们那里我们也学到了很多,也得到了提高。 字典对象只有4个属性和6个方法,相对其它的对象要简洁得多,而且容易理解使用方便,功能强大,运行速度非常快,效率极高。深受大家的喜爱。 本文希望通过对一些字典应用的典型实例的代码的详细解释来给初次接触字典和想要进一步了解字典用法的朋友提供一点备查的参考资料,希望大家能喜欢。 给代码注释估计是大家都怕做的,因为往往是出力不讨好的,稍不留神或者自己确实理解得不对,还会贻误他人。所以下面的这些注释如果有不对或者不妥当的地方,请大家跟帖时指正批评,及时改正。 字典的简介 字典(Dictionary)对象是微软Windows脚本语言中的一个很有用的对象。 附带提一下,有名的正则表达式(RegExp)对象和能方便处理驱动器、文件夹和文件的(FileSystemObject)对象也是微软Windows脚本语言中的一份子。 字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成。就好像一本字典书一样,是由很多生字和对它们对应的注解所组成。比如字典的“典”字的解释是这样的: “典”字就是具有唯一性的关键字,后面的解释就是它的项,和“典”字联合组成一对数据。

VBA技巧23 遍历工作表的方法

技巧1 遍历工作表的方法 在Excel应用中经常需要遍历工作簿中所有的工作表,有以下两种方法可以实现。 1-1 使用For...Next 语句 使用For...Next 语句遍历工作簿中所有的工作表,如下面的代码所示。 #001 Sub ShCount1() #002 Dim c As Integer #003 Dim i As Integer #004 Dim s As String #005 c = Worksheets.Count #006 For i = 1 To c #007 s = s & Worksheets(i).Name & Chr(13) #008 Next #009 MsgBox "工作簿中含有以下工作表:" & Chr(13) & s #010 End Sub 代码解析: ShCount1过程使用For...Next 语句遍历工作簿中所有的工作表,并用消息框显示所有的工作表名称。 第5行代码根据Worksheet对象的Count属性返回工作簿中工作表的数量赋给变量c。应用于Worksheet对象的Count属性返回Worksheets集合中工作表的数量,语法如下:expression.Count 第6行代码开始For...Next 语句循环。For...Next 语句以指定次数来重复执行一组语句,语法如下: For counter = start To end [Step step] [statements] [Exit For]

Next [counter] 参数counter是必需的,用做循环计数器的数值变量。 参数start是必需的,循环计数器的初值。 参数end是必需的,循环计数器的终值。 参数step是可选的,环计数器的步长,缺省值为1。 参数statements是可选的,放在For和Next之间的一条或多条语句,它们将被执行指定的次数。 第7行代码在For...Next循环中根据工作表的索引号取得所有工作表的名称赋给字符串变量s。 运行ShCount过程结果如图1-1所示。 图1-1 取得所有工作表名称 1-2 使用For Each...Next 语句 使用For Each...Next语句遍历工作簿中所有的工作表,如下面的代码所示。 #001 Sub ShCount2() #002 Dim Sh As Worksheet #003 Dim s As String #004 For Each Sh In Worksheets #005 s = s & https://www.wendangku.net/doc/7318936215.html, & Chr(13) #006 Next #007 MsgBox "工作簿中含有以下工作表:" & Chr(13) & s #008 End Sub 代码解析: ShCount2过程使用For Each...Next语句遍历工作簿中所有的工作表,并用消息框显示所有工作表名称。 第4行代码使用For Each...Next语句遍历Worksheets集合中所有元素。For Each...Next语句针对一个数组或集合中的每个元素,重复执行一组语句,语法如下:For Each element In Group

excelvba常用代码总结1

Excel VBA常用代码总结1 改变背景色 Range("A1"). = xlNone ColorIndex一览 改变文字颜色 Range("A1"). = 1 获取单元格 Cells(1, 2) Range("H7") 获取范围 Range(Cells(2, 3), Cells(4, 5)) Range("a1:c3") '用快捷记号引用单元格Worksheets("Sheet1").[A1:B5]

选中某sheet Set NewSheet = Sheets("sheet1") 选中或激活某单元格 '“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格。 '下面的代码首先选择A1:E10区域,同时激活D4单元格: Range("a1:e10").Select Range("d4:e5").Activate '而对于下面的代码: Range("a1:e10").Select Range("f11:g15").Activate '由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。 获得文档的路径和文件名 '路徑 '名稱 '路徑+名稱 '或将ActiveWorkbook换成thisworkbook 隐藏文档 = False 禁止屏幕更新 = False 禁止显示提示和警告消息 = False

文件夹做成 strPath = "C:\temp\" MkDir strPath 状态栏文字表示 = "计算中" 双击单元格内容变换 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If >= 5And <= 8) Then If = "●"Then = "" Else = "●" End If Cancel = True End If End Sub 文件夹选择框方法1 Set objShell = CreateObject("") Set objFolder = (0, "文件", 0, 0) If Not objFolder Is Nothing Then path= & "\" end if Set objFolder = Nothing Set objShell = Nothing

编写高效Excel VBA代码的最佳实践(一)

编写高效Excel VBA代码的最佳实践(一) 时间:2009-06-16 18:39:30来源:网络作者:未知点击:0次 很多Excel VBA文章和图书都介绍过如何优化VBA代码,使代码运行得更快。下面搜集了一些使Excel VBA代码运行更快的技术和技巧,基本上都是实践经验的总结。如果您还有其它优化Excel VBA代码的方法,可以在本文后留言或给出链 很多Excel VBA文章和图书都介绍过如何优化VBA代码,使代码运行得更快。下面搜集了一些使Excel VBA代码运行更快的技术和技巧,基本上都是实践经验的总结。如果您还有其它优化Excel VBA代码的方法,可以在本文后留言或给出链接,与大家分享。 对于应用程序属性,在代码运行时关闭除必需属性以外的其它所有属性 在代码运行时关闭不需要的Excel功能。其原因是,如果通过VBA更新不同的单元格区域,或者从不同的单元格区域复制/粘贴来创建汇总表,则不希望Excel浪费时间和资源来重新计算公式、显示粘贴进度或者重绘网格,尤其在每次单独的操作后(更有甚者,如果代码使用了循环,则每次单独操作后Excel都会在后台运行这些功能)。只需要在代码执行结束时进行一次重新计算和重绘就足以使工作簿更新。 下面的代码将帮助您提高代码的执行速度。 (1)放置在主代码前的一段代码,获取Excel当前的属性状态,然后将其关闭 '获得当前的Excel设置状态,将其放置在代码的开头 screenUpdateState = Application.ScreenUpdating statusBarState = Application.DisplayStatusBar calcState = Application.Calculation eventsState = Application.EnableEvents displayPageBreakState = ActiveSheet.DisplayPageBreaks '注:这是工作表级的设置 '关闭一些Excel功能使代码运行更快 Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.Calculation = xlCalculationManual Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False '注:这是工作表级的设置 (2)放置在主代码结束后的一段代码,用来将Excel恢复到代码运行前的设置 '代码运行后,恢复Excel原来的状态;将下面的代码放在代码的末尾 Application.ScreenUpdating = screenUpdateState Application.DisplayStatusBar = statusBarState Application.Calculation = calcState Application.EnableEvents = eventsState ActiveSheet.DisplayPageBreaks = displayPageBreaksState '注:这是工作表级的设置

相关文档
相关文档 最新文档