分享

VBA常用代码解析(第三十二讲)

 wdmexcel 2015-09-17

119 遍历控件的方法

如果窗体或工作表中的控件很多,在写代码时,如果是相同的代码,可以使用循环语句遍历控件,无需每个控件都写相同的代码,以减少代码量。

119-1 使用名称中的变量遍历控件

如果控件使用系统缺省名称,如“TextBox1”、“TextBox2”,前面是固定的字符串,后面是序号的,可以使用For...Next 语句循环遍历控件。

对于窗体中的控件,如下面的代码所示。

Private Sub CommandButton1_Click()

Dimi As Integer

Fori = 1 To 3

Me.Controls('TextBox' & i)= ““

Next

End Sub

代码解析:

窗体按钮的单击事件,一次性清空窗体中三个文本框的内容。

4行代码,将窗体中三个文本框名称中的最后一个序号设成变量,在文本框中循环并清空其内容。

对于工作表中的控件,如下面的代码所示。

Private Sub CommandButton1_Click()

Dimi As Integer

Fori = 1 To 4

Me.OLEObjects('TextBox' &i).Object.Text = ““

Next

End Sub

代码解析:

工作表中按钮的单击事件,在工作表中的三个文本框中循环,清空文本框的内容。

4行代码,将工作表中四个文本框名称中的最后一个序号设成变量,使用OLEObjects方法在工作表中的文本框中循环。

OLEObjects方法返回图表或工作表上单个OLE对象(OLEObject)或所有OLE对象的集合(OLEObjects集合)的对象,语法如下:

expression.OLEObjects(Index)

参数expression是必需的,返回一个Chart对象或Worksheet 对象。

参数Index 是可选的,OLE对象的名称或编号。

注意控件的名称是指控件在属性窗口中的名称。如果控件的名称没有规律不适用此方法。

119-2 使用对象类型遍历控件

如果控件的名称没有规律,可以使用For Each...Next 语句循环遍历所有控件,使用TypeName函数返回控件的对象类型,根据控件的对象类型进行相应的操作。

对于窗体中的控件,如下面的代码所示。

Private Sub CommandButton1_Click()

DimCtr As Control

ForEach Ctr In Me.Controls

If TypeName(Ctr) = 'TextBox' Then

Ctr = ““

End If

Next

End Sub

代码解析:

按钮的单击事件,遍历所有控件并把所有文本框的内容清空。

2行代码,声明变量类型。

3行代码,使用For Each...Next语句遍历窗体所有控件。

4行代码,使用TypeName函数返回变量的对象类型。

TypeName 函数返回一个字符串,提供有关变量的信息,语法如下:

TypeName(varname)

参数varname是必需的,它包含用户定义类型变量之外的任何变量。

如果变量Ctr是文本框控件,无论该文本框的名称是否已经被修改,TypeName(Ctr)都会返回“TextBox”字符串。

对于工作表中的控件,则使用下面的代码。

Private Sub CommandButton1_Click()

DimObj As OLEObject

ForEach Obj In Me.OLEObjects

If TypeName(Obj.Object) = 'TextBox'Then

Obj.Object.Text = ““

End If

Next

End Sub

119-3 使用程序标识符遍历控件

工作表中的ActiveX控件还可以根据控件的程序标识符找到相应的控件,如下面的代码所示。

Private Sub CommandButton1_Click()

DimObj As OLEObject

ForEach Obj In Me.OLEObjects

If Obj.progID = 'Forms.TextBox.1'Then

Obj.Object.Text = ““

End If

Next

End Sub

代码解析:

工作表中按钮的单击事件,遍历工作表中的所有控件并把工作表中所有文本框的内容清空。

2行代码,声明变量类型。

3行代码,使用For Each...Next语句遍历工作表中的所有控件。

4行代码,使用控件的ProgId属性返回控件的程序标识符。

ProgId 属性返回控件的程序标识符,语法如下:

expression.ProgId

参数expression是必需的,一个有效的对象。

ActiveX 控件的程序标识符如表格所示。

文本框控件返回的程序标识符是“Forms.TextBox.1,此返回值并不受文本框控件名称的影响,所以根据工作表中控件的程序标识符可以找出全部文本框控件。

119-4 使用名称中的变量遍历图形

如果工作表中有多个图形,可以根据名称的序号使用For...Next 语句遍历图形,如下面的代码所示。

Private Sub CommandButton1_Click()

Dimi As Integer

Fori = 1 To 3

Me.Shapes('文本框 ' & i).TextFrame.Characters.Text = 'TextBox'& i

Next

End Sub

代码解析:

工作表中按钮的单击事件,在工作表中的三个图形文本框中依次写入“TextBox1”、“TextBox2”和“TextBox3”字符串。

3行到第5行代码,使用Shapes属性在工作表上的三个图形文本框中循环。

Shapes属性返回Shapes对象,代表工作表或图形工作表上的所有图形,可以使用Shapes(index)(其中index是图形的名称或索引号)返回单个的Shape对象。

返回单个的Shape对象后使用Characters方法向图形文本框中添加字符。Characters 方法的语法如下:

expression.Characters(StartLength)

参数expression是必需的,返回一个指定文本框内Characters对象的表达式。

参数Start是可选的,表示将要返回的第一个字符。如果此参数设置为 1 或被忽略,则Characters方法会返回以第一个字符为起始字符的字符区域。

参数Length是可选的,表示要返回的字符个数。如果此参数被忽略,则Characters 方法会返回该字符串的剩余部分。

119-5 使用FormControlType属性遍历图形

如果工作表中的是窗体控件,可以使用For Each...Next语句遍历工作表中图形并根据其FormControlType属性返回特定的窗体控件,如下面的代码所示。

Private Sub CommandButton2_Click()

DimmyShape As Shape

ForEach myShape In Sheet4.Shapes

If myShape.Type = msoFormControl Then

If myShape.FormControlType = xlCheckBoxThen

myShape.ControlFormat.Value = 1

End If

End If

Next

End Sub

代码解析:

工作表中按钮的单击事件,清除工作表中所有的复选框。

2行代码声明变量myShape为图形对象。

3行代码使用For Each...Next语句遍历工作表中的图形。

4行代码根据图形的Type属性判断图形是否为窗体控件。应用于Shape对象的Type属性返回或设置图形类型,窗体控件返回常量msoFormControl

5行代码根据控件的FormControlType属性判断窗体控件是否为复选框控件。FormControlType属性返回窗体控件的类型,可以为表格所示的XlFormControl常量之一。

6行代码使用ControlFormat属性返回工作表中的复选框,并将其他Value属性设置为1选中复选框,如果需要取消复选框只需将Value属性设置为-4146

120 使微调框最小变动量小于1

在用微调框调节数值时,默认的变动量只能设置成整数。为了使微调框的变动量小于1,如每次的变动量为0.01,需要在代码中做必要的设置,如下面的代码所示。

Private Sub UserForm_Initialize()

WithMe.SpinButton1

.Max = 10000

.Min = -10000

.SmallChange = 1

.Value = 0

Me.TextBox1 = Format(.Value'0.00')

EndWith

End Sub

Private Sub SpinButton1_Change()

Me.TextBox1= Format(Me.SpinButton1 * 0.01'0.00')

End Sub

代码解析:

使用微调框调节文本框的数值,每次的变动量为0.01

1行代码到第9行代码,窗体的初始化事件,在窗体显示时对微调框控件进行必要的设置。

34行代码,设置微调框控件的MaxMin 属性。MaxMin 属性规定滚动条或数值调节钮的 Value 属性可接收的最大值和最小值,语法如下:

object.Max [= Long]

object.Min [= Long]

参数object是必需的,一个有效的对象。

参数Long是可选的,指定Value属性的最大设置值或最小设置值。

5行代码,设置微调框控件的SmallChange属性为1SmallChange属性设定当用户单击滚动条或数值调节钮中的滚动箭头时发生的变动量,语法如下:

object.SmallChange[= Long]

参数object是必需的,一个有效的对象。

参数Long是可选的,设定Value属性的变动量。

SmallChange属性只能设置为整数。

6行代码,设置窗体显示时微调框控件的Value属性为0

7行代码,使用Format函数将将文本框的初始值格式化为“0.00”。关于Format函数请参阅▲102

11行代码,微调框控件的Change事件,在微调框控件的Value属性发生变动时,将变动量乘0.01后赋给文本框,使文本框的变动量每次为0.01


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多