金字塔决策交易系统—高级教程(2016修订版)(5)

2019-03-28 15:50

金字塔决策交易系统高级教程

注意:与其他程序设计语言不同,VBA 程序是事件驱动的,没有Main 函数之类的入口的概念。本质上,

VBA 代码应该只是一些完成具体工作的集合,而通过界面元素或者金字塔的事件驱动执行,你可以通过自定义按钮、菜单,并指定一个宏(VBA 过程,自定义界面也可以通过编程手段完成此类工作),通过单击此按钮即可调用相应的VBA代码,或者将调用绑定在金字塔的某个事件下。

下面我们简单看一下这段代码的组成,代码第1 行表示这是一个新的过程,名称为“MyFirstVBAProgram” 第2行调用MsgBox 这个函数,显示一个对话框,第3 行表示过程结束。VBA 程序由不同的模块组成,在模块内部,可以定义不同的变量、过程或函数,由此组成一个完整的程序。

(3)善用工具及其他

VBA 集成开发环境,提供了很多便利的工具可以帮助或辅助我们写出好的程序,其中的方便必须亲自使用才可以体会,因此,一定要善用工具。VBA 的代码编辑器提供了几项非常有用的功能,代码即时提示可以使我们不必记忆太多的东西,输入对象后会自动列出其属性、方法等内容。

在实际的编程过程中,一定要善于利用在线帮助,VBA 的在线帮助包含了大量对编程有用的参考信息,任何人都不可能记得住所有的函数、对象的用法和程序语言的语法,所以一定要利用好帮助。帮助的使用可以在“帮助”菜单->VBA编程信息 处获得。可以通过帮助目录浏览,或者通过查找输入关键字查找相关内容。

图3-3

在代码书写中,如果一句代码过长,应该使用接行字符(“-”)将其分为几行,而不是书写为一行,一

17

金字塔决策交易系统高级教程

般来说,代码的长度不要超过80 个字符为宜,这样阅读方便,不需要横向拉动滚动条,也不容易出错。例如上面第一个例子我们可以将对话框文字输出分成2行:

MsgBox _

“我的第一个自编程序。”

对于代码格式,一定要养成缩进的习惯,在过程之后,循环语句、判断语句之内,如本书的例子样子,缩进4 个字符,便于阅读。代码中,在一个逻辑或者操作完成之后,应该空一行,以表示其逻辑关系,在过程与过程之间,也应该空一行。VBA 中,使用单引号“’”表示注释,编写程序时,一定要养成注释的习惯。注释不是所有代码都要注释;一般来说,对一个模块、过程、函数,要大概说明其功能,参数;对于一个过程,如果涉及较复杂的算法,要说明其使用的算法或流程。在过程和函数中,对关键代码,说明其操作的目的、算法或流程。

3.3.2模块、函数和过程

(1)模块

模块是自定义的过程、函数保存的地方有两种基本类型的模块:类模块和标准模块,本节介绍标准模块,类模块将在专门介绍。模块可以通过右键单击工程资源管理器的工程名,选择“插入-模块”来新建,新建的模块缺省的名称为“模块1”,“模块2”,建议在模块右键->重命名中更改为有意义的名称。模块有2 个任务:(1)保存过程和函数;(2)定义类模块内的私有变量或整个工程的公有变量。

在模块中可以声明变量(包括对象),定义过程和函数。过程和函数的定义见下文,变量的声明如下。 变量的声明:

Dim I ‘Dim 表示声明变量i

注意:要求变量声明VBA 缺省可以不声明变量,在第一次使用的时候自动声明,但此功能也是VBA 代码(包括其他Basic 代码)的一个主要错误之源。试想第一次使用了一个变量strMyFirstName,之后又通过strMyFirstNme(少一个a)来使用它,但由于拼写不同,VBA 以为是一个新的变量,于是会新声明一个变量,这样的错误极其难以发现。可以通过“工具-选项”对话框,在“其他”页,选中“VBA变量名必须显式声明所有变量”,则在使用变量前,都必须先通过Dim 语句声明。

(2)过程

过程是最基本的运行单位。一个完整的过程一般类似如下格式: Sub Test(参数列表…) … … End Sub

在以上程序中,Sub 代表过程种类,表示运行指定的操作,但不返回运行结果;Test表示过程名称,最后以End Sub 结束。

其中按值按地址传递参数指一种将参数地址而不是将值传递给过程的方式,这就使过程访问到实际的变量。

18

金字塔决策交易系统高级教程

结果,过程可改变变量的真正值。VBA 缺省按地址传递参数。

Sub MyTest() dim V1,V2 V1 = 1 V2 = 2

MyTestCall (v1,v2) 'v1,v2是参数 MsgBox v1 MsgBox v2 End Sub

Sub MyTestCall(V1,V2) V1=5 V2=.6 End Sub 调用的方法是:

运行结束后,你会发现V1和V2值都被改变了。

所有的可执行代码都必须属于某个过程。不能在别的过程中定义Sub 过程。Exit Sub 语句使执行立即从一个Sub 过程中退出。程序接着从调用该Sub 过程的语句下一条语句执行。在Sub 过程的任何位置都可以有Exit Sub 语句。在Sub 过程中使用的变量分为两类:一类是在过程内显式定义的,另一类则不是。在过程内显式定义的变量(使用Dim 方法)都是局部变量。过程(包括函数等)的创建可以通过在代码窗口直接键入“Sub…”来创建,也可以使用菜单的“插入-过程”对话框来创建。

(3)函数

函数是包含在 Function 和 End Function 语句之间的一组语句。Function 过程与 Sub 过程类似,但是 Function 过程可以返回值。Function 过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果 Function 过程无任何参数,则 Function 语句必须包含空括号 ()。Function 过程通过函数名返回一个值,这个值是在过程的语句中赋给函数名的。Function 返回值的数据类型总是 Variant。

在下面的示例中,Celsius 函数将华氏度换算为摄氏度。Sub 过程 ConvertTemp 调用此函数时,包含参数值的变量被传递给函数。换算结果返回到调用过程并显示在消息框中。

Sub ConvertTemp()

temp = InputBox(\请输入华氏温度。\

MsgBox \温度为 \摄氏度。\ End Sub

Function Celsius(fDegrees)

Celsius = (fDegrees - 32) * 5 / 9

19

金字塔决策交易系统高级教程

End Function

VBA 中有大量内置函数,例如前边例子里使用过的MsgBox,InputBox。VBA 的函数主要包括数学函数(包括三角函数、随机数等)、字符串函数等等,熟悉VBA 的内置函数可以提高工作效率,更好的完成工作。对于VBA 的函数,可以参考VBA帮助文档。

(4)在代码中使用 Sub 和 Function 过程

调用 Function 过程时,函数名必须用在变量赋值语句的右端或表达式中。例如: Temp = Celsius(fDegrees) 或

MsgBox \温度为 \摄氏度。\

调用 Sub 过程时,只需输入过程名及所有参数值,参数值之间使用逗号分隔。不需使用 Call 语句,但如果使用了此语句,则必须将所有参数包含在括号之中。

下面的示例显示了调用 MyProc 过程的两种方式。一种使用 Call 语句;另一种则不使用。两种方式效果相同。

Call MyProc(firstarg, secondarg) MyProc firstarg, secondarg

请注意当不使用 Call 语句进行调用时,括号被省略。

3.3.3数据类型和变量

(1)什么是 VBA 数据类型?

金字塔VBA 只有一种数据类型,称为 Variant。Variant 是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息。因为 Variant 是 VBScript 中唯一的数据类型,所以它也是 VBScript 中所有函数的返回值的数据类型。

最简单的 Variant 可以包含数字或字符串信息。Variant 用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理。这就是说,如果使用看起来象是数字的数据,则 VBScript 会假定其为数字并以适用于数字的方式处理。与此类似,如果使用的数据只可能是字符串,则 VBScript 将按字符串处理。当然,也可以将数字包含在引号 (\中使其成为字符串。

(2)什么是变量?

变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息。例如,可以创建一个名为 ClickCount 的变量来存储用户单击某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在 VBA 中只有一个基本

20

金字塔决策交易系统高级教程

数据类型,即 Variant,因此所有变量的数据类型都是 Variant。

(3)声明变量

声明变量的一种方式是使用 Dim 语句、Public 语句和 Private 语句在 Script 中显式声明变量。例如:

Dim DegreesFahrenheit

声明多个变量时,使用逗号分隔变量。例如:

Dim Top, Bottom, Left, Right

另一种方式是通过直接在 Script 中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯,因为这样有时会由于变量名被拼错而导致在运行 Script 时出现意外的结果。因此,最好通过“工具-选项”对话

框,在“其他”页,选中“VBA变量名必须显式声明所有变量”,则在使用变量前,都必须先通过Dim 语句声明。。

(4)命名规则

变量命名必须遵循 VBA的标准命名规则。变量命名必须遵循:

? 第一个字符必须是字母。 ? 不能包含嵌入的句点。 ? 长度不能超过 255 个字符。 ? 在被声明的作用域内必须唯一。

(5)变量的作用域与存活期

变量的作用域由声明它的位置决定。如果在过程中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有局部作用域并被称为过程级变量。如果在过程之外声明变量,则该变量可以被 Script 中所有过程所识别,称为 Script 级变量,具有 Script 级作用域。

变量存在的时间称为存活期。Script 级变量的存活期从被声明的一刻起,直到 Script 运行结束。对于过程级变量,其存活期仅是该过程运行的时间,该过程结束后,变量随之消失。在执行过程时,局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别。

(6)给变量赋值

创建如下形式的表达式给变量赋值:变量在表达式左边,要赋的值在表达式右边。例如: B = 200

(7)标量变量和数组变量

多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号 ( )。下例声明了一个包含 11 个元素的一维数组:

Dim A(10)

虽然括号中显示的数字是 10,但由于在 VBA中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。

在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示:

21


金字塔决策交易系统—高级教程(2016修订版)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:主题教育活动简报第1期(总第89期)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: