本教材系统阐述了Visual Basic的基本语法、算法原理和编程方法,通过大量的实例展示了Visual Basic的程序设计思想。通过本教材的学习,读者不仅能够掌握使用Visual Basic编写应用程序的方法,还能够掌握多种程序设计的经典算法,提高自身的逻辑思维能力。 本教材主要内容包括: 第1章主要介绍Visual Basic的软件界面、编程原理和程序设计方法;第2章主要介绍窗体及常用控件的用法;第3章主要介绍Visual Basic的基本语句和语法;第4章主要介绍程序的三种基本结构及相关算法;第5章主要介绍数组的应用;第6章主要介绍自定义过程、函数的定义及使用、变量的作用域与生命期;第7章主要介绍程序中的常见错误及程序调试的方法;第8章主要介绍文件的相关操作及文件控件;第9章主要介绍Visual Basic的图形图像编程;第10章主要介绍Visual Basic的数据库编程。书中每章后均附有课后习题。 为便于教师授课和学生自学,本教材除有配套的实验教程《Visual Basic程序设计实验指导与习题汇编》外,还配有电子教案、例题源代码、习题答案等课程资源。这些资源都可以在中国药科大学慕课平台(eclass.cpu.edu.cn)上免费下载。本书封面贴有清华大学出版社防伪标签,无标签者不得销售。
本书融入作者多年教学心得,内容编排合理,讲解详细,采用先现象后原理的方式展开教学内容,符合读者的认知规律。
语言通俗易懂,例题丰富且具有代表性,讲解大量经典算法知识,帮助读者更好地理解程序设计思想,提高逻辑思维能力。
本书有配套实验教程《Visual Basic程序设计实验指导与习题汇编》,方便使用主教材的教师进行理论和实验内容的安排。
本书有配套的课程资源网站,提供丰富的教学大纲日历、课件、例题源代码、讲课视频、推荐参考书等课程资源,读者可登录清华大学出版社网站下载使用。
前言
Visual Basic程序设计“程序设计语言”是我国大部分高校针对本科生开设的一门计算机公共基础课程。教育部高等学校计算机科学与技术教学指导委员会于2006年编写的《关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求》中指出,程序设计语言课程的教学目标为“掌握正确的程序设计方法与思路,具备初步的应用程序开发基础”,教学内容要涉及“程序设计语言(包括面向过程及面向对象的程序设计语言)、程序设计基本方法、数据结构与算法基础等”。本着这一指导思想,我们编写了该套教材。本教材主要授课对象为高等院校非计算机相关专业的学生,因此选用了Visual Basic作为程序设计工具,因为Visual Basic是一款具有图形用户化界面、简单易学的编程工具。对于初学者来说只需要花少量课时的学习就能掌握它的基本用法、开发出标准的Windows应用程序。这样不仅可以让学生快速掌握一款编程工具的用法、对此产生兴趣,更重要的是,可以让教师和学生将更多的精力投入到程序设计基本方法、数据结构与算法基础的教与学上,这样才能真正实现“程序设计语言”课程的教学目标。本教材编者来自于一所教育部直属重点高校——中国药科大学,该校在计算机基础课教学方面一直保持着较高的教学水平。几位编者均为具有多年教学经验的优秀教师,教材中也溶入了编者多年来的教学心得。其中,第1章、第5章由海滨编写,第2章、第6章、第10章由关媛编写,第3章、第8章、第9章由张洁玉编写,第4章、第7章由刘新昱编写。全书由关媛进行统稿。感谢易治萍为本教材的部分课后习题提供素材。教材的主要特色在于: 内容编排合理,采用先现象后原理的方式展开教学内容,符合学生的认知规律;语言通俗易懂,例题丰富且具有代表性,重点突出;不仅细致地介绍了Visual Basic的基本语法,而且融入了大量的经典算法以帮助学生更好地理解程序设计的思想,提高学生的逻辑思维能力。为方便使用本教材的教师授课和学生自学,该理论课教材还有配套的实验教程——《Visual Basic程序设计实验指导与习题汇编》。该实验教程对本教材起到了一个很好的辅助教学作用,其中的实验内容可以帮助学生在实践中提高编程能力,习题汇编可以让学生在阶段性的学习之后考察自己对所学知识的掌握情况,以巩固所学知识。除此之外,本教材还配有电子教案、例题源代码、习题答案等课程资源。这些资源都可以在清华大学出版社网站(www.tup.com.cn)上免费下载。限于作者的学识水平,书中的错误和疏漏在所难免,敬请读者指正。
编者2016年8月Visual Basic程序设计教程(第2版)
目录
Visual Basic程序设计第1章Visual Basic概述与程序设计方法11.1Visual Basic概述11.1.1Visual Basic的发展与特点11.1.2对象、属性、方法和事件31.1.3界面与事件驱动41.2Visual Basic应用程序的创建61.2.1Visual Basic集成开发环境的界面61.2.2创建Visual Basic应用程序的一般步骤91.3程序设计与算法131.3.1程序设计方法概述131.3.2算法14习题116
第2章界面设计与常用控件172.1界面设计概述172.2窗体222.3常用控件272.3.1命令按钮272.3.2文本框282.3.3标签302.3.4列表框和组合框312.3.5图片框与图像控件342.3.6单选按钮、复选框与框架352.3.7定时器控件372.3.8滚动条392.4菜单的设计402.4.1菜单编辑器的使用412.4.2弹出式菜单422.5对话框43Visual Basic程序设计目录2.6多窗体界面设计442.6.1多重窗体442.6.2多文档界面462.7键盘与鼠标事件462.7.1键盘事件472.7.2鼠标事件482.7.3对象的拖放48习题250
第3章Visual Basic程序设计基础523.1Visual Basic程序的代码组织方式与书写规则523.1.1代码的组织方式523.1.2代码的书写规则533.2数据类型543.2.1标准数据类型543.2.2用户自定义数据类型573.3常量与变量583.3.1常量583.3.2变量593.4运算符与表达式623.4.1算术运算符与算术表达式623.4.2关系运算符与关系表达式643.4.3逻辑运算符与逻辑表达式663.4.4字符串连接运算符与字符串连接表达式673.4.5运算符的优先级683.5常用内部函数683.5.1数学函数683.5.2转换函数693.5.3字符函数713.5.4日期和时间函数733.5.5格式化输出函数743.6基本语句743.7数据的输入与输出773.7.1数据的输入773.7.2数据的输出78习题382
第4章Visual Basic的基本控制结构854.1顺序结构854.2选择结构864.2.1If语句864.2.2Select Case语句894.2.3选择结构的嵌套914.2.4条件函数934.3循环结构954.3.1For…Next循环954.3.2Do…Loop循环974.3.3While…Wend循环1004.3.4循环结构的嵌套1014.3.5闲置循环与DoEvents语句1024.4使用基本控制结构实现简单算法1044.4.1累加、连乘算法1044.4.2统计算法1064.4.3判断素数算法1074.4.4求最大公约数、最小公倍数算法1094.4.5进制转换算法1104.4.6字符串处理算法1134.4.7求通项和算法1164.4.8迭代法117习题4118
第5章数组1215.1数组概述1215.1.1数组的概念1215.1.2数组的定义1225.1.3数组的结构1245.2数组的基本操作1255.2.1数组元素的赋值1265.2.2数组元素的输出1305.2.3数组函数及数组语句1345.3动态数组1365.3.1动态数组定义1365.3.2Erase语句1375.3.3动态数组应用1395.4控件数组1405.4.1控件数组的创建1415.4.2控件数组的应用1435.5数组的常用算法1455.5.1排序算法1455.5.2查找算法1495.6数组的综合应用153习题5159
第6章过程1616.1概述1616.2Sub过程1626.2.1事件过程1626.2.2通用过程1636.2.3Sub过程的创建1656.2.4Sub过程的调用1666.2.5Sub Main过程1686.3Function过程1726.3.1Function过程的创建1726.3.2Function过程的调用1736.4参数传递1766.4.1形参与实参1766.4.2按值传递参数1776.4.3按地址传递参数1796.4.4数组参数1836.4.5可选参数与可变参数1886.4.6对象参数1896.5变量的作用域与生命期1906.5.1过程级变量1916.5.2模块级变量1936.5.3全局变量1946.5.4同名变量1956.6递归过程196习题6200
第7章程序调试2057.1错误类型2057.1.1语法错误2057.1.2运行错误2077.1.3逻辑错误2087.2程序调试方法2097.2.1调试工具2097.2.2调试窗口2107.2.3调试手段2117.2.4调试步骤217习题7221
第8章文件2228.1文件概述2228.1.1文件的打开2228.1.2文件的关闭2238.1.3常用文件操作函数2238.2顺序文件2258.2.1顺序文件的写操作2258.2.2顺序文件的读操作2268.2.3程序实例2288.3随机文件2308.3.1Type类型的定义2308.3.2随机文件的读操作2308.3.3随机文件的写操作2318.4二进制文件2318.5文件管理控件2328.5.1驱动器列表框2328.5.2目录列表框2338.5.3文件列表框2348.5.4程序实例236习题8237
第9章图形与多媒体2419.1绘图操作基础2419.1.1坐标系统2419.1.2颜色设置2459.2图形控件2479.2.1直线控件Line2479.2.2形状控件Shape2489.3绘图方法2529.3.1Pset方法2529.3.2Point方法2549.3.3Line方法2559.3.4Circle方法2569.3.5与绘图有关的基本操作2589.4多媒体控件259习题9262
第10章数据库程序设计26410.1数据库概述26410.2数据库的创建与访问26510.2.1在Visual Basic中创建Access数据库26610.2.2用Microsoft Access创建数据库26810.2.3如何在Visual Basic程序中访问数据库27210.3Visual Basic的Data数据控件27410.3.1Data控件的常用属性、方法和事件27410.3.2数据感知控件27510.4ADO访问数据库27610.4.1ADO数据控件27710.4.2ADO对象编程模型28110.5SQL结构化查询语言28510.5.1SQL语句的基本组成28610.5.2SQL的常用语句28710.5.3SQL查询语句的自动生成289习题10290
参考文献292
第5章 数组在编程时常常遇到需要对一系列同类型的数据进行处理的问题,如果使用前面所介绍的简单变量来处理这类问题会有很大困难。因为简单变量之间是相互独立、没有内在联系的,这就需要为不同的数据定义名称不同的变量,当数据量较大时,变量的定义和处理过程将会非常的复杂而繁琐。如果能够给一个数据集合中的数据起一个共同的名字,用一组连续的编号来区分集合中的不同数据,那么就可以通过数据集合的名字和编号来表示其中的每个数据。采用这样的方式表示数据将使得对大量数据的处理变得很方便。这样的一种具有共同名称、以编号来区别不同数据的数据集合就称为数组。5.1数 组 概 述数组是具有相同类型的有序变量的集合。这些变量按照一定的规则排列,占据着一段连续的存储单元。5.1.1数组的概念数组名的命名规则与简单变量命名规则一样。数组名不是代表一个变量,而是代表有内在联系的一组变量,数组名中实际存放的内容是这组数据在内存中存放的首地址。数组内的每个成员称为数组元素,数组元素就是一个个简单变量,数组元素的类型也就是数组的类型。为了标识数组中的不同元素,每个数组元素都有各自的编号即下标,下标确定了数组元素在数组中的位置,可以用数组名和下标唯一地标识数组中的某个元素。数组元素的一般表示形式如下: 数组名(下标1\[,下标2,…\])其中,下标可以是常量、变量或算术表达式。当下标的值为非整数时,会自动进行四舍五入处理。如果只需一个下标就可以确定一个数组元素在数组中的位置,则该数组称为一维数组。如果需要两个下标才能确定一个数组元素在数组中的位置,则该数组称为二维数组。以此类推,必须由N个下标才能确定一个数组元素在数组中的位置,则该数组称为N维数组。因此,确定数组元素在数组中位置的下标个数就是数组的维数。通常把二维以上的数组称为多维数组,Visual Basic规定数组的维数不得超过60。5.1.2数组的定义Visual Basic规定在使用一个数组之前必须对数组进行定义,确定数组的名称和它的数据类型,指明数组的维数和每一维的上、下界的取值范围,这样系统就可以为数组分配一块连续的内存区域,存放数组的所有元素。数组的每个元素在这个连续的内存区域内都占据各自特定的单元。Visual Basic程序设计第5章数组在Visual Basic中有两种类型的数组: 固定大小数组和动态数组。在定义数组时就确定了数组的大小,并且在程序运行过程中不能改变其大小的数组称为固定大小数组。在定义数组时不指明数组的大小,在程序运行时才根据需要确定其大小,即在程序运行中可以改变大小的数组称为动态数组。1. 数组定义语句数组定义语句的一般形式如下: Public | Private | Static | Dim 数组名 (\[ 维界定义 \])\[As 数据类型 \]说明: (1) Public、Private、Static、Dim是作用域关键字,数组作用域的含义与变量作用域的含义类似(作用域的概念将在第6章中重点介绍),不同关键字的含义如表5\|1所示。表5\|1数组作用域说明关键字适 用 范 围Public用于标准模块的声明段,定义全局数组Private和Dim用于模块的声明段,定义模块级数组Dim用于过程中,定义局部数组Static用于过程中,定义静态数组(2) “维界定义”的格式如下: \[ 下界1 To\] 上界1 \[\[, 下界2 To\] 上界2…\]格式中的下界1、上界1表示数组第一维下标的下界和上界,下界2和上界2表示数组第二维下标的下界和上界,以此类推。“下界”和关键字“To”可以缺省,缺省情况下数组元素下标的取值是从0开始,等价于“0 To上界”。如果代码中有Option Basic 1声明语句,则缺省的下界是从1开始,等价于“1 To上界”。例如,在窗体模块的“通用”部分有下列数组说明语句: Dim a(3) As Integer,b(1 To 2,2) As SinglePrivate c(-6 To -2) As String6第一条语句等价于: Dim a(0 To 3) As Integer,b(1 To 2,0 To 2) As Single它定义了一个模块级的一维整型数组a以及二维单精度型数组b。一维数组a共有4个数组元素,分别是a(0)、a(1)、a(2)、a(3)。二维数组b共有6个元素,分别是b(1,0)、b(1,1)、b(1,2),b(2,0)、b(2,1)、b(2,2)。第二条语句定义了一个模块级的一维定长字符串型数组c,数组的维下界是-6,维上界是-2,共有5个元素,分别是c(-6)、c(-5)、c(-4)、c(-3)、c(-2)。每个元素都是一个6字符的定长字符串,占6个字节的内存空间,因此整个数组占30字节的内存空间。2. 数组的上、下界某维的下界和上界分别表示该维下标的最小值和最大值。维界的取值范围不得超过长整型(Long)数据表示的范围(-2 147 483 648~2 147 483 647),且下界必须小于等于上界。在定义固定大小数组时,只能用常量或常量表达式进行维界说明。如果数组定义语句中的维界不是整数,将自动按照CInt函数的方法对其进行四舍五入取整。例如: Dim x As IntegerConst N As Integer=10Dim a(5.5) As Integer'正确,该语句等同于Dim a(1 To 6) As IntegerDim b(1 To 35) As Integer'正确,该语句等同于Dim b(1 To 15) As IntegerDim c(N) As Integer '正确,该语句等同于Dim c(10) As IntegerDim d(0 To x) As Integer '错误,不允许使用变量做数组的维界说明注意: 若用符号常量说明数组的维界,那么该符号常量在说明语句之前必须已定义过。3. 数组的类型数组定义语句中“As 数据类型”用来声明数组的类型,数据的类型即数组中元素的数据类型。数组的类型可以是Integer、Long、Single、Double、Date、Boolean、String(变长字符串)、Stringlength(定长字符串)、Object、Currency、Variant和自定义类型。若缺省As短语,则表示该数组是变体(Variant)类型。4. 数组的大小用数组说明语句定义数组,指定了各维的上、下界取值范围,也就确定了数组的大小。所谓数组的大小就是这个数组所包含的元素的个数。数组的大小有时也称为数组的长度,可用下面的公式计算得到: 数组的大小=第一维大小×第二维大小×…×第N维大小各维的大小=维上界—维下界 1例如,程序有下面的语句:Option Base 1Dim a(10) As IntegerDim b(5,-3 To -1) As String说明: Option Base 1语句只能位于模块的通用部分,用以说明缺省下界的数组的元素下标默认是从1开始的。因此: 一维数组a的大小为10-1 1=10个数组元素。二维数组b的大小为(5-1 1)×\[-1-(-3) 1\]=5×3=15个数组元素。5. 数组元素的初始值数组说明语句不仅定义了数组的作用域,分配了存储空间,而且还对数组元素的值进行了初始化。数组元素的初始值与变量的初始值相同,与元素的类型有关。即数值型数组元素的初始值为零,变长字符型数组元素的初始值为空字符串,定长字符型数组元素的初始值为指定长度个数的空格,布尔型数组元素的初始值为“False”,变体型数组元素的初始值是“Empty”。5.1.3数组的结构数组是具有相同数据类型的多个变量的集合,数组中的所有元素按一定顺序存储在连续的内存单元中。下面分别讨论一维/二维/三维数组的结构。1. 一维数组的结构 一维数组的逻辑结构为一个线性队列。假设有如下语句: Dim a(8) As Integer则数组a的逻辑结构为: a(0),a(1),a(2),…,a(6),a(7),a(8)由于内存也是线性结构,因此,一维数组的逻辑结构与其在内存中存放的次序是一致的。a(0) a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8)2. 二维数组的结构二维数组的逻辑结构为一张由行和列组成的二维表,与数学中的矩阵相同。二维数组的数组元素需要用两个下标来标识,即要指明数组元素的行号和列号。假设有如下语句: Option Base 1Dim t(3,4) As Integer定义了一个二维数组t,其中行列下标的下界都是从1开始,行下标的上界为3,列下标的上界为4,因此这是一个3行4列的二维数组。该二维数组的逻辑结构示意如下: 第1列第2列第3列第4列第1行t(1,1)t(1,2)t(1,3)t(1,4)第2行t(2,1)t(2,2)t(2,3)t(2,4)第3行t(3,1)t(3,2)t(3,3)t(3,4)二维数组在内存中是“按列存放”在线性结构的内存中的。即先存放第一列的所有元素: t(1,1) t(2,1) t(3,1),接着存放第二列所有元素: t(1,2) t(2,2) t(3,2) ……直到存完最后一列的所有元素。二维数组t的元素在内存中的具体存放次序如下: t(1,1) t(2,1) t(3,1) t(1,2) t(2,2) t(3,2) t(1,3) t(2,3) t(3,3) t(1,4) t(2,4) t(3,4)3. 三维数组的结构三维数组是由行、列和页组成的三维表。三维数组也可理解为几页的二维表,即每页由一张二维表组成。三维数组的元素是由行号、列号和页号共同来标识的。假设有如下语句: Option Base 1Dim p(2,3,2) As Integer定义了一个三维数组p,其中第一个数2标识了数组的行下标上界为2,第二个数3标识了列下标上界为3,第三个数2标识了页下标上界为2。因此,这个三维数组有2页、2行、3列共12个元素。三维数组p的逻辑结构示意如下: 第1页p(1,1,1)p(1,2,1)p(1,3,1)p(2,1,1)p(2,2,1)p(2,3,1)第2页p(1,1,2)p(1,2,2)p(1,3,2)p(2,1,2)p(2,2,2)p(2,3,2)三维数组在内存中是按“逐页逐列”的规则存放的。即先对数组的第一页中的所有元素按列的顺序分配存储单元,然后再对第二页中的所有元素按列的顺序分配存储单元……直到数组的每一个元素都分配了存储单元。三维数组p的元素在内存中的具体存放次序如下:p(1,1,1) p(2,1,1) p(1,2,1) p(2,2,1) p(1,3,1) p(2,3,1) p(1,1,2) p(2,1,2) p(1,2,2) p(2,2,2) p(1,3,2) p(2,3,2)5.2数组的基本操作由于数组元素的本质仍是变量,只不过是带有下标的变量而已,所以对数组元素的输入输出操作可以与变量相同。但与普通变量不同的是,数组元素的下标是有序排列的,可以通过循环变量表示下标访问不同的数组元素。因此在需要对整个数组或数组中连续的元素进行处理时,利用循环结构是最有效的方法。5.2.1数组元素的赋值〖*4/5〗1. 用赋值语句给数组元素赋值单个数组元素的赋值可以通过赋值语句来实现。例如: Dim a(3) As Integer,b(1 To 2,2) As Singlea(0)=10b(1,0)=1b(2,2)=52. 通过循环逐一给数组元素赋值若在一个For循环中用循环控制变量作为数组元素的下标,就可依次访问一维数组的每一个元素。同样使用双重的For循环,用外层、内层循环的循环控制变量分别作为第一维、图5\|1数组赋值输出第二维的下标就可依次访问二维数组的所有元素。以此类推,数组有N维就可以采用N重循环给数组的所有元素一一赋值。例如,下面程序的功能是: 在窗体输出一个两位随机数构成的一维数组;在图片框上输出一个三位随机数构成的二维数组。请注意代码中循环控制变量作为数组元素下标的使用方法。程序的运行结果如图5\|1所示。Option ExplicitOption Base 1Private Sub Form_Click()Dim a(10) As Integer,b(3,4) As IntegerDim i As Integer,j As IntegerPrint "一维数组: "For i=1 To 10 '使用循环给一维数组赋值并输出a(i)=Int(90Rnd) 10Print a(i); '分号用于在一行上连续输出数组元素Next iPrint'在窗体上换行Picture1.Print "二维数组: "For i=1 To 3 '利用二重循环给二维数组赋值并输出For j=1 To 4b(i,j)=Int(900Rnd) 100Picture1.Print b(i,j);Next jPicture1.Print '在图片框中换行Next iEnd Sub3. 用InputBox函数给数组元素赋值用InputBox函数可以实现通过弹出的输入框给数组元素赋值。例如,下面程序的功能是: 用InputBox函数给数组元素赋值,并将数组元素以每行6个的形式输出到文本框中。InputBox上有动态的提示信息,即用户随时知道在录入第几个元素的值。程序运行界面如图5\|2所示。图5\|2InputBox函数给数组元素赋值Option ExplicitOption Base 1Private Sub Form_Click()Dim a(12) As Integer,i As Integer,st As StringFor i=1 To 12a(i)=Val(InputBox("A(" i ")=","数组A赋值"))st=st Str(a(i))If i Mod 6=0 Then' 每行显示6个数据st=st vbCrLf '这里也可通过Chr(13) Chr(10)实现换行End IfNext iText1=stEnd Sub注意: 本程序界面中文本框的MultiLine属性必须设置为True,否则无法实现多行显示。小提示: 利用InputBox函数从键盘输入多个数值时,可以利用数字键区,输完数字后按Enter键进行确认,这样可以提高录入数据的速度。由于在执行InputBox函数时程序会暂停运行等待输入,并且每次只能输入一个值,占用运行时间长,所以InputBox函数只适合输入少量数据。如果数组比较大,需要输入的数据较多,用InputBox函数给数组赋值就显得不高效,这时可以运用文件操作从文件中批量地读取和保存数据(参见教材第8章中有关文件的知识)。4. 用Array函数给数组赋值利用Array函数可以把一个数据集赋值给一个Variant变量,再将该Variant变量创建成一个一维数组。Array函数的一般使用形式如下: 变体变量名 =Array(\[数据列表\])注意: Array函数只能给Variant类型的变量赋值。“数据列表”是用逗号分隔的赋给数组各元素的值。函数创建的数组的长度与列表中的数据的个数相同。若缺省数据列表,则创建一个长度为0的数组。若程序中缺省Option Base 1语句或使用了Option Base 0语句,则Array函数创建的数组的下界从0开始;若窗体的通用部分有Option Base 1语句,数组的下界从1开始。例如执行如下程序,运行结果见图5\|3(a)。图5\|3Array函数的使用Option ExplicitOption Base 1Private Sub Form_Click()Dim a As VariantDim b(4) As Varianta=Array(5,6,7,8,9) 'a包含整型数组Print a(1); a(2); a(3); a(4); a(5)a=Array(5.51,6.31,7.61,8.11) 'a包含单精度型数组Print a(1); a(2); a(3); a(4)a="Visual Basic" 'a成为字符型变量Print ab=Array(1,2,3,4,5) '该语句有错误End Sub运行该程序,执行语句“a=Array(5,4,3,2,1)”,Array函数就创建了一维数组a,数组元素的类型是Integer。该数组的下标从1开始,共有a(1)、a(2)、a(3)、a(4)、a(5)等5个元素,它们的值分别是5、4、3、2、1。这里的a是一个包含数组的Variant变量,与类型是Variant的数组是完全不相同的,可再次用赋值语句“a=Array(1.51,2.31,3.61,4.11)”给a赋值,此刻Array函数创建的数组元素个数是4,数组元素的类型改为Single。也可以用普通的赋值语句给已包含数组的Variant变量a赋一个值,例如,a="NO Array"。执行该语句后,a不再包含数组,又成为一个普通的字符型变量。当执行语句“b=Array(1,2,3,4,5)”时,会产生一个“给数组赋值”的错误,如图5\|3(b)所示,其原因是b目前已经是被定义为Variant类型的数组,而不是一个普通的Variant类型的变量。注意: 不可以用Array函数给非Variant类型的变量赋值。5. 用文本框数据给数组赋值对大批量的数据输入,采用文本框输入效率更高。输入时可以采用Instr函数获取分隔符的位置从而给数组元素赋值,也可以采用Split函数方便地给数组赋值。Split函数返回一个下标从零开始的一维数组,赋值号左边必须是一个变体型变量。以下程序实现了用文本框给数组赋值,其运行结果如图5\|4所示。Option ExplicitPrivate Sub Command1_Click()Dim a As Variant,i As Integera=Split(Text1,",") '逗号为数据分隔符For i=LBound(a) To UBound(a)Picture1.Print "A("; i; ")="; a(i)Next iEnd Sub如果在文本框Text1中输入“27,584,987,21.68”,则运行程序后a会变成一个含有5个元素的数组,分别是a(0)=27,a(1)=584,a(2)=987,a(3)=21.68。图5\|4Split函数获取数组元素图5\|5Instr函数获取数组元素