金字塔决策交易系统高级教程
MsgBox \循环重复了 \次。\ End Sub
Sub ChkLastWhile() Dim counter, myNum counter = 0 myNum = 9 Do
myNum = myNum - 1 counter = counter + 1 Loop While myNum > 10
MsgBox \循环重复了 \次。\ End Sub
(11)重复执行语句直到条件变为 True
Until 关键字用于检查 Do...Loop 语句中的条件。有两种方式检查条件:在进入循环之前检查条件(如下面的 ChkFirstUntil 示例);或者在循环至少运行完一次之后检查条件(如下面的 ChkLastUntil 示例)。只要条件为 False,就会进行循环。
Sub ChkFirstUntil() Dim counter, myNum counter = 0 myNum = 20
Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1 Loop
MsgBox \循环重复了 \次。\ End Sub
Sub ChkLastUntil() Dim counter, myNum counter = 0 myNum = 1 Do
myNum = myNum + 1
27
金字塔决策交易系统高级教程
counter = counter + 1 Loop Until myNum = 10
MsgBox \循环重复了 \次。\ End Sub
(11)退出循环
Exit Do 语句用于退出 Do...Loop 循环。因为通常只是在某些特殊情况下要退出循环(例如要避免死循环),所以可在 If...Then...Else 语句的 True 语句块中使用 Exit Do 语句。如果条件为 False,循环将照常运行。
在下面的示例中,myNum 的初始值将导致死循环。If...Then...Else 语句检查此条件,防止出现死循环。 Sub ExitExample() Dim counter, myNum counter = 0 myNum = 9
Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1
If myNum < 10 Then Exit Do Loop
MsgBox \循环重复了 \次。\ End Sub
(12)使用 While...Wend
While...Wend 语句是为那些熟悉其用法的用户提供的。但是由于 While...Wend 缺少灵活性,所以建议最好使用 Do...Loop 语句。
(13)使用 For...Next
For...Next 语句用于将语句块运行指定的次数。在循环中使用计数器变量,该变量的值随每一次循环增加或减少。
例如,下面的示例将过程 MyProc 重复执行 50 次。For 语句指定计数器变量 x 及其起始值与终止值。Next 语句使计数器变量每次加 1。
Sub DoMyProc50Times() Dim x
For x = 1 To 50 MyProc Next End Sub
28
金字塔决策交易系统高级教程
关键字 Step 用于指定计数器变量每次增加或减少的值。在下面的示例中,计数器变量 j 每次加 2。循环结束后,total 的值为 2、4、6、8 和 10 的总和。
Sub TwosTotal() Dim j, total
For j = 2 To 10 Step 2 total = total + j Next
MsgBox \总和为 \。\ End Sub
要使计数器变量递减,可将 Step 设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中,计数器变量 myNum 每次减 2。循环结束后,total 的值为 16、14、12、10、8、6、4 和 2 的总和。
Sub NewTotal() Dim myNum, total
For myNum = 16 To 2 Step -2 total = total + myNum Next
MsgBox \总和为 \。\ End Sub
Exit For 语句用于在计数器达到其终止值之前退出 For...Next 语句。因为通常只是在某些特殊情况下(例如在发生错误时)要退出循环,所以可以在 If...Then...Else 语句的 True 语句块中使用 Exit For 语句。如果条件为 False,循环将照常运行。
3.3.5用户窗体
VBA 包括一类特殊的对象――用户窗体(UserForm),用户窗体是一个窗口或对话框,用以构成应用程序的用户界面部分。使用用户窗体可以提供一个图形用户界面,在此界面上,可以为其添加按钮、图片、文本框等控件,作为一个自定义窗口或者对话框,供用户与程序进行交互。
(1)设计用户窗体
通过在工程资源管理器右键单击,选择“插入-用户窗体”可以新建一个用户窗体(图3-4),新建的用户窗体缺省名称为“UserForm1”,新建以后的用户窗体是一个空白区域,可以从工具箱中选择控件为用户窗体添加界面元素。选中用户窗体,在右键选择属性窗口内可以设置其属性(如果工具箱和属性窗口没有显示,可以通过查看菜单激活之),也可以拖动改变其大小。窗体具有设计模式和代码模式之分,在资源管理器窗口选择窗体,可以在其工具栏或者通过右键切换窗体的设计模式和代码模式。设计模式下可以通过鼠标拖拽以及属性调整来可视化设计用户窗体的外观以及样式。在代码模式下,可以和在一般的模块窗体一样,定义变量、
29
金字塔决策交易系统高级教程
过程,并且可以响应窗体和控件的事件。
新建一个窗体,按Ctrl+S快捷键,在随后的窗体保存窗口名称设置为“frmMyHelloWorld”,在属性窗口,将Caption 设置为“Hello, My First Form”。
图3-4用户窗体设计界面
从工具箱中选择不同的控件,然后在用户窗体上按下鼠标左键,拖动即可将控件添加到用户窗体。从工具箱选择“文本框”,添加到用户窗体,右键该控件选择属性命令,在属性窗口设置其名称为“txtHelloMsg”;选择“命令按钮”,添加到用户窗体,属性窗口设置其名称为“cmdHello”,Caption 为“Hello”。双击处于设计状态的窗体,VBA IDE 自动打开代码窗口,选择代码窗口上方的对象名和右侧的事件,这里我们选择Click事件,这时金字塔将新建一个名为“rmMyHelloWorld_cmdHello_Click”的过程,这个过程称为事件,当用户点击按钮,此过程内的代码就会执行。在此过程中输入如下代码:
Sub rmMyHelloWorld_cmdHello_Click()
rmMyHelloWorld_txtHelloMsg.Text = \
30
金字塔决策交易系统高级教程
End Sub
按Alt+F8弹出宏运行窗口,选择我们刚才建立的frmMyHelloWorld窗体,单击按钮,文本框的文字将会变成“Hello, My VBA!”(图3-6)。
图3-5 代码与事件显示窗口
图3-6运行的My First Form
这就是用户窗体编程的基本概念,我们可以操作的窗体,文本框,按钮等都是对象,准确来说,都是ActiveX 控件,通过对这些对象的可视化设计,设置其属性,然后在其事件内写入需要的操作。总而言之,用户窗体是VBA 中的一个对象,我们可以通过设置其属性、调用其方法、响应其事件来操作用户窗体和其之上的控件,当用户对用户窗体的元素进行操作时(通过鼠标、按钮),响应的事件就会被执行,这种编程模式就叫做事件驱动的编程模式。我们可以创建一个过程来显示设计好的用户窗体。
(2)事件驱动
下面介绍一下事件的有关概念。事件简单来说,就是由用户或者系统触发的、可以在代码中响应的一段代码。例如,我们移动鼠标、点击窗体和按钮、敲击键盘、窗体的显示移动等等都会产生一系列的事件,通过编写代码中响应这些事件,当发生此类事件时,例如单击了一个按钮,程序代码就会进行相应的操作。例如在前边的例子中,在按钮单击事件中(cmdHello_Click()),我们书写了改变文本框文本的代码。窗体、窗体上的控件都定义了很多事件,例如鼠标移动、单击等事件。用户窗体编程时,编写一个事件的响应代码可以在代码
31