Visual Basic(简称VB),是1991年由Microsoft公司开发的一种事件驱动编程语言和集成开发环境(IDE)。[2][6]Viusal Basic源自于BASIC编程语言,具有图形用户界面(GUI)和快速应用程序开发(RAD)系统的特点。它可以使用DAO、RDO、ADO连接数据库,或者创建ActiveX控件,用于生成类型安全和面向对象的应用程序。[2]
1991年,微软发布了Visual Basic 1.0版本,目的是用来设计Windows程序。[3]Windows操作系统不断升级,Visual Basic的功能也随之升级。2002年底,微软.NET战略的推出使得Visual Basic开始迁移到.NET平台上,[7]Visual Basic 6.0逐渐被VB.NET取代,但它在历史上为许多Windows应用程序开发者提供了强大的工具和便捷的开发体验。VB.NET继承了Visual Basic的许多特性,同时也引入了更多现代编程语言的功能,进一步增强了开发效率和程序性能。2005年,微软宣布不再对Visual Basic提供免费支持。[7]2010年,微软将Visual Basic.NET和Visual Basic融合到Visual Studio中。[7]2020年,微软宣布结束对Visual Basic的开发。[8]
Visual Basic依靠可视化的开发环境,曾经是热门的桌面开发工具,容易上手、可以直接编写图形界面的特点,使得Visual Basic成为很多人接触计算机编程的第一种语言。[8]而随着Java等语言的兴起,Visual Basic的优势逐渐丧失殆[dài]尽。[8]而且由于Visual Basic技术不支持继承、异常处理不完善、无原生支持多线程等缺点,大大限制了Visual Basic技术发展。[9]
诞生与发展
1991年,微软公司推出了Visual Basic 1.0版,是在原DOS操作系统平台上的 BASIC 语言基础上开发的新一代面向对象的程序设计语言。[3]与Basic语言不同的是,Visual Basic 是用来设计 Windows 程序的。这在当时引起了很大的轰动。[6]1992年9月,Visual Basic 1.0 for DOS版本发布,这个连接编程语言和用户界面的进步被称为Tripod,最初的设计是由阿兰·库珀(Alan Cooper)完成的。[10]

由于Windows 3.1的推出,Windows已经充分获得了用户的认可,而 Visual Basic 1.0 的功能过于简单,相对于 Windows 3.1 的强大功能并没有发挥出来,所以,微软于1992年推出了Visual Basic 2.0版本,[3]改善了上一个版本的界面与速度,加入了对象型变量,对语言进行改进和扩充、对VBX有了很好的支持等。[11][10]

Visual Basic 2.0推出几个月后,微软又发布了Visual Basic 3.0版本,该版本针对性的增强了数据库的功能,增加了对最新的ODBC 2.0的支持,提供了数个数据库控件和专业级控件,增加了许多新的金融函数。[12]1995年,Visual Basic 4.0版本上线,[6]该版本强化了可视化程序设计的概念,简化了用户设计应用程序界面的工作,[13]还可以开发DLL工程,为Visual Basic成为一种COM语言奠定了基础,但是性能问题遇到了瓶颈,巨大的运行库也让用户感到不满,对以前版本的支持度也不够高。[11]

为增强Visual Basic对Internet的支持和开发能力,1997年微软公司又推出了Visual Basic 5.0版本,同时也开启了Visual Basic中英文版本的时代。[3]新版本是专门为Windows 95设计的,采用 Visual C++ 编写,融合Visual C++的优点,编译和运行速度比Visual Basic 4.0版本提高了近20%。[14]随着Windows 98的发行,微软公司发布了Visual Basic 6.0版本,该版本在创建自定义控件、对数据库的访问及对Internet的访问等方面都得到了进一步的加强、完善和提高。Visual Basic 6.0是经典VB的最后一个版本,在功能和性能上都达到了顶峰,引入了对Web开发的支持、改进的数据库访问功能和新的控件。其稳定性和广泛的功能使其成为开发者社区中长期受欢迎的工具,至今仍有许多应用程序依赖于VB 6.0。[3]
版本大变革
随着微软.NET战略的推出,Visual Basic 开始迁移到了.NET平台,[7]2002年底,最新版本Visual Basic.NET登场,使得Visual Basic成为了完全面向对象的编程语言,并且成为功能有很大改进的Web设计工具。[3]该版本利用 Microsoft.NET 框架进行重新设计,[15]在此之前,发布的第一个Beta版本使得使用者的反响很大,对于能否接受该版本产生了分歧,经过几个版本的过渡之后才找到正确的定位[11]。为了让Visual Basic程序员从巨大的变化中缓过来,于2003年问世的Visual Basic.NET 2003(v7.1)版本改动很小,是相当稳重的一个版本。修正了许多错误,将事件处理恢复了Visual Basic 6.0版本体验,语言方面由也进行了改进。[11]
版本的融合
2005年推出的 Visual Basic 2005 是.NET框架的一部分,开发人员的工作效率是该版本发布的目标,[16]Visual Basic 小组成员表示,使用 Visual Basic 2005可以节省50%的编码。[11]但也是这个版本割裂了Visual Basic的阵营,微软宣布将不再对非 .NET版本的Visual Basic提供免费支持。[7]2008年,Visual Basic 2008上线,该版本对数据访问、集成开发环境和编辑功能等都有所改进[17]。2010年,Visual Studio 2010 版本发布,新版本将Visual Basic.NET和Visual Basic融合为 Visual Studio 中,[7]还增加了许多新功能。[18]2012年,Visual Studio 2012 版本发布,新增了异步功能、迭代器、调用层次结构、调用方信息、代码编辑器等方面的功能。[19]2015年,微软发布开发工具 Visual Stuio2015 版本,对于跨平台的支持进行扩展增强,添加应用连接到服务的向导配置项目,集成开发环境做出了改进。[20]2018年,TIOBE编程社区出具的报告写到“微软正在慢慢减少对 Visual Basic的投入,这种语言迟早会衰落。”[7]2019年,Visual Studio 2019 版本发布,新版本对开发、协作和调试功能进行了改进。这也是微软最后一次对 Visual Basic 语言进行开发[21]2020年,微软宣布结束对Visual Basic的开发。[8]
历史版本
发布日期名称更新内容1991年Visual Basic 1.0 Windows 版本[10]-1992年Visual Basic 2.0加入了对象型变量,对语言进行改进和扩充、对VBX有了很好的支持[11]1993年Visual Basic 3.0增强了数据库的功能,增加了对ODBC 2.0和Jet数据引擎的支持,提供整个数据库控件[11]1995年Visual Basic 4.0是一个可以创建32位和16位Windows程序的版本,[22]VBX控件换成了OCX控件,所用语言换成了Visual Basic For Application[11]1997年Visual Basic 5.0加入了本地代码编译器,支持开发自己的ActiveX控件,大幅度的优化了Visual Basic For Application语言[11]1998年Visual Basic 6.0在创建自定义控件、对数据库的访问及对Internet的访问等方面都得到了进一步的加强、完善和提高[3]2002年Visual Basic.NET 利用Microsoft.NET框架进行重新设计,增加了Windows窗体、Web窗体和移动Web窗体[15]2003年Visual Basic.NET 2003IDE的事件处理恢复成了Visual Basic6.0版本的体验,语言方面增加了移位运算符、声明了循环变量[11]2005年Visual Basic 2005 该版本在语言上的改进有:泛型、运算符重载、Partial Type、窗体的默认实例、语法的多种改进、My关键字以及编译器可以将代码特定的提取成XML文件[11]2005年微软宣布结束对于 VB 6.0 的延长支持[23]2008年Visual Basic 2008 提供支持 IIF 函数、匿名类、LINQ、Lambda 表达式、XML 数据结构等新语言特性,增加了许多新的控件[17]2010年Visual Basic 2010增加了自动实现的属性、集合初始值设定项、隐式行继续、多行Lambda表达式和子列程、动态支持、协变和逆变等新功能[18]2012年Visual Basic 2012新增了异步功能、迭代器、调用层次结构、调用方信息、代码编辑器等方面的功能[19]2015年Visual Basic 14扩展视觉工作室;构建适用Android,iOS,和Windows的应用程序,将应用连接到服务[20]2017年Visual Basic 15加入了元祖数据结构,二进制文字和数字组分隔符允许二进制数的本机表示[24]2019年Visual Studio 16即时代码清理和更好的搜索结果;能够直接在Visual Studio中通过Git优先工作流,实时编辑和调试以及代码审查;突出显示并导航到特定值,优化内存使用,并拍摄应用程序执行的自动快照[21]2020年微软宣布结束对VB的开发[8]
专业术语
对象和类
Viusal Basic是基于对象的程序设计语言,对象是系统的基本运行实体,Visual Basic中对象的概念和面向对象的程序设计中的对象概念是一致的,但是在使用上有很大的区别。Visual Basic中的对象分为两类:一类是由系统设计好的,成为预定义对象,可以直接使用或者对其进行操作;另一类由用户定义,可以建立用户自己的对象。在Visual Basic中,窗体和空间就是预定义对象。[25]
类是一个抽象的整体概念,对象是类的实例化。类与对象是面向对象程序设计语言的基础。以“学生”为例,说明类与对象的关系,学生是一个笼统的名称,相当于一个“类”,而具体一个学生就是这个类的实例,也就是这个类的一个对象。[26]
属性
属性是一个对象的特性,在可视化编程中,每一个对象都有一组特定的属性。对象常见的属性有标题、名字、颜色、字体大小、是否可见等。一个对象属性都有一个默认值,如果不明确地改变该属性值,程序就将使用它的默认值。通过修改对象的属性就能够控制对象的外观和操作,有些属性在运行时是只读。对象属性的设置一般有两条途径:通过属性窗口设置和通过代码设置。[25]
事件
事件就是对象上所发生的事情。在Visual Basic中,事件是预先定义好的、能够被对象标识的动作,如Click单击、DbIClick双击、Load装入、Change改变等。不同的对象能够识别不同的事件。当事件由用户触发或系统触发时,对象会对该事件做出响应。响应某个事件后执行操作用过一段程序代码来实现,这样的代码叫做事件过程。Visual Basic中的事件分为系统事件和用户事件。[25]
方法
Visual Basic系统将一些通用的操作编写成子程序并封装起来,这些通用子程序就称为方法。用户在程序中可以不加说明调用对象的想法。方法是属于对象的,在调用方法时应该指明方法所属的对象。[27]
窗体和控件
窗体是一块“画布”,在窗体上可以直观地建立应用程序。在设计程序时,窗体是程序员的”工作台“,运行程序时,每个窗体对应于一个窗口。窗体结构与Windows环境下的应用程序窗口一样,具有控制单元、标题栏、最大化/还原按钮、最小化按钮、关闭按钮以及边框。窗体是Visual Basic中的对象,具有自己的属性、事件和方法。[25]

控件和窗体一样,都是Visual Basic中的对象,它们共同构成用户界。Visual Basic的控件是具有自己的属性、事件和方法的对象,通常分为标准控件、ActiveX控件和可插入对象控件三种类型。标准控件是在默认状态下工具箱中显示的控件,被封装在Visual Basic的可执行文件中,如命令按钮、文本框、单选按钮等;ActiveX控件单独保存在.ocx类型的文件中,包括各种版本Visual Basic提供的控件;可插入控件是指用户可将Excel工作表或PowerPoint幻灯片等作为一个对象添加到工具箱中,编程时可根据需要随时创建。[25]

数据类型与数组
数据是指程序所需处理的信息,如:数值、文本、图形等。数据类型是指具有共同特征的数据所形成的种类;其中特征可以从“值的范围”和“值上允许进行的操作”来个方面来综合地刻画。数据类型可以划分为基本数据类型和自定义数据类型,基本数据类型是系统预定义的数据类型,自定义数据类型是在基本数据类型基础上,由用户定义的数据类型。[28][29]
基本数据类型
| 基本数据类型 | 类型说明[29] |
|---|---|
| 数值型 | 数值型数据用于表示数量,由数字、小数点、正/负号和字母组成 |
| 字符型 | 又称字符串,须由英文双引号括起来,用于表示文本内容,如“Chinese”“中医药信息化”等。其中,双引号称为字符型数据的界定符,单独双引号表示不含任何字符的空字符串 |
| 逻辑型 | 又称为布尔型,逻辑型数据用于指定截然相反的状态或判断结果 |
| 日期型 | 用于表示日期和时间,须由#括起来,日期类型数据的表示形式有: #mm/dd/yyyy[hh:mm:ss AM]#、#mm/dd/yyyy[hh:mm:ss PM]#、 #mm-dd-yyyy[hh:mm:ss AM]#、#mm-dd-yyyy[hh:mm:ss AM]#, 例如,#10/1/1949 3:10:08 PM#表示:日期1949年10月1日和时间15:10:08 |
| 对象性 | 对象性数据用于引用应用程序所需的任何对象,如:窗体、控件、word文档等。对象型数据是以4个字节的内存空间来存储对象的地址,以便引用对象 |
| 变体型 | 除了定长字符型和自定义数据类型以外,变体型可以包含任何数据类型的数据 |
自定义数据类型
在程序设计过程中,某一类数据可能由若干个数据项(又称为成员、元素)组成,自定义数据类型能够“封装”数据所包含的成员,归类和统一使用成员。自定义数据类型需要遵循“先声明、后使用”的原则.Type语句用于声明自定义数据类型,语法格式如下:[28]
[Private|Public|Type自定义数据类型] [成员名称1] As [数据类型] End Type
数组
数组是一种数据结构,是有序数据的集合,用于保存大量的、逻辑上有联系的数据,数组中的每个元素可以是不同数据类型的数据。在Visual Basic中,数组必须先定义再使用,定义数组后,必须为数组开辟所需要的内存区。根据内存区开辟时机的不同,可以把数组分为静态数组和动态数组。用数值常量或符号常量作为下标的数组是静态数组,而用变量作为下标的数组则为动态数组。[30]
数组的定义也称为数组的声明。一维数组的定义格式为:
Dim 数组名([下届 To]上界)[As类型]
动态数组是指在定义数组时未给出数组的大小,即以变量作为下标值,当要使用时,再用ReDim语句重新定义数组的大小。[30]
ReDim[ Preserve 数组名 ( [ 下届1 To]上界1[下届2 To]上界2···)]
变量和常量
在程序运行过程中,其值不能被改变的量称为常量,能够改变的量称为变量,常量和变量名称称为标识符。标识符用来命名变量、符号常量、数组、方法、类、对象、接口和包等。[30]
变量
变量所代表的内容可以发生变化。在计算机中,变量实际上代表着某种类型数据对应的存储单元,变量的名字就是该单元的名字。Visual Basic中变量必须先定义、后使用,定义变量时,必须定义其类型、名称和数据类型。格式如下:[30]
Dim i1 As Integer '定义整型变量i1 Dim s1,s2 As String '定义两个字符串变量s1和s2 Dim b1 As Byte,s1 As String '在一行中定义了两个变量
常量
为了避免因常数变化而造成数据查找不便的问题,Visual Basic中提供了一个声明常量的功能,即用户可以为每个常数定义一个有意义的名字,凡是程序中需要使用此常数的地方,不必再写这个常数,而是以其名字代替。Visual Basic中提供的常量有内部常量和外部常量两大类。[28]
命名规则
对Visual Basic模块中的过程、常量、变量和参数命名时,通常,不应使用与 Visual Basic 或主机应用程序中使用的函数、语句、方法和内部常量名称相同的任何名称,这会导致与语言中的关键字的意义混淆。 要使用与所指定名称相冲突的内在语言函数、语句或方法,必须显式标识它,在调用内部函数、语句或方法名,需要在其前面加上相关类型库的名称。例如,如果有一个名为的Left变量,则只能使用 VBA.Left调用Left函数。[31]
关键字是对编译器具有特殊含义的预定义保留字集,如果使用关键字作为变量名称(标识符),需要将变量名称括在括号 ( [] ) 中。例如,[Let]是一个有效的标识符,但Let不是,因为它是一个关键字。[32]
| Visual Basic保留的关键字[33] | ||||||
|---|---|---|---|---|---|---|
| AddHandler | AddressOf | Alias | And | AndAlso | As | Boolean |
| ByRef | Byte | ByVal | Call | Case | Catch | CBool |
| CByte | CChar | CDate | CDec | CDbl | Char | CInt |
| Class | CLng | CObj | Const | Continue | CSByte | CShort |
| CSng | CStr | CType | CUInt | CULng | CUShort | Date |
| Decimal | Declare | Default | Delegate | Dim | DirectCast | Do |
| Double | Each | Else | ElseIf | End | End If | Enum |
| Erase | Error | Event | Exit | False | Finally | For |
| Friend | Function | Get | GetType | GetXML Namespace | Global | GoTo |
| Handles | If | Implements | Imports | In | Inherits | Integer |
| Interface | Is | IsNot | Let | Lib | Like | Long |
| Loop | Me | Mod | Module | MustInherit | MustOverride | MyBase |
| MyClass | Namespace | Narrowing | New | Next | Not | Nothing |
| Not Inheritable | Not Overridable | Object | Of | On | Operator | Option |
| Optional | Or | OrElse | Overloads | Overridable | Overrides | ParamArray |
| Partial | Private | Property | Protected | Public | RaiseEvent | ReadOnly |
| ReDim | REM | Remove Handler | Resume | Return | SByte | Select |
| Set | Shadows | Shared | Short | Single | Static | Step |
| Stop | String | Structure | Sub | SyncLock | Then | Throw |
| To | True | Try | TryCast | TypeOf | UInteger | While |
| Widening | With | WithEvents | WriteOnly | Xor | #Else | - |
基本语句
语句是完整的指令,它可以包含关键字、运算符、变量、常量和表达式。在Visual Basic中,语句分为声明语句和可执行语句。这些语句可以调用方法或函数,并可以在代码块中执行循环或分支结构,或者将表达式的值赋予变量。[34]
Dim a,b,t As Integer a = 2:b=3 t=a:b=a:b=t
长语句在编写代码中可以拆分为几行,使用行继续符在下一行继续该语句,行继续符依次包含一个空格、一个下划线字符(_)和一个回车符,且必须是行的最后字符。[34]例如:
Dim userName As String ="张三" Console.WriteLine(userName &_ ",欢迎您进入编程世界!")
编写代码中会向代码中添加嵌入的注释信息来帮助说明源代码,注释行以撇号(’)开头或以关键字Rem开头,后跟一个空格。注释可以添加在代码中的任意位置,但不能添加在字符串中。[34]示例:
‘ 这是一个单独的注释行 Rem 这是另一个单独的注释行 x += y ‘此语句的功能相当于x = x+y
算术运算符和表达式
算术运算符用于实现算术运算,其运算对象和结果都是数值型数据。[35]以x=5举例算术运算符和优先级:
| 算术符 | 含义 | 优先级 | 算术表达式及举例 | 结果 |
|---|---|---|---|---|
| ^ | 乘方 | 1 | x^2 | 25 |
| - | 取负 | 2 | -x | -5 |
| * | 乘 | 3 | 4*x | 20 |
| / | 除 | 3 | 20/x | 4 |
| \ | 整除 | 4 | 24\x | 4 |
| Mod | 取余 | 5 | 22 mod x | 2 |
| + | 加 | 6 | 10 + x | 15 |
| - | 减 | 6 | 10 - x | 5 |
算术表达式是用算数运算符和括号将数值数据连接而成的式子,但数学中的代数式并不一定是Visual Basic中的算法表达式。表达式在同一行上书写成线性序列,只能使用圆括号,且可以嵌套,不能使用方括号和花括号。表达式中不能出现π、α、β、λ等希腊字母,可以用其他字符串来替代,例如圆周率π可以用3.14来代替。表达式通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。[35]
关系运算符和表达式
关系运算的运算对象是数值型数据和字符型数据,是对两个数进行比较的运算。[35]
| 关系运算符 | 含义 | 关系表达式示例 | 运算结果 |
|---|---|---|---|
| = | 等于 | “ABC”=”Abc” | False |
| <> | 不等于 | “XYZ”<>“xyz” | True |
| > | 大于 | “ABC”>“AD” | False |
| >= | 大于等于 | 88>=88 | True |
| < | 小于 | 88<98 | True |
| <= | 小于等于 | “李明”<=“李丽” | False |
关系运算的结果是逻辑型的值。当关系成立时,结果为True;当关系不成立时,结果为False。关系运算符的优先级相同,若关系表达式中又有算数表达式,则先进行算术运算,再进行关系运算。[35]
逻辑运算与逻辑表达式
逻辑运算符是对操作数进行逻辑运算,运算的结果为逻辑性数据。当逻辑关系成立时,运算结果为True;当逻辑关系不成立时,运算结果为False。[35]
| 逻辑运算符 | 含义 | 优先级 | 运算规则 |
|---|---|---|---|
| Not | 非 | 1 | 非真即假,非假即真 |
| And | 与 | 2 | 全真为真,有假为假 |
| Or | 或 | 3 | 有真为真,全假为假 |
| Xor | 异或 | 4 | 相异为真,相同为假 |
控制语句
Visual Basic使用结构化的控制语句来控制程序的流程,其中If···Then···Else语句和Select···Case语句是选择语句,根据表达式的值从若干给定的语句中选择一个来执行。而根据表达式的值重复执行一组语句是循环语句,包括For···Next语句、For Each···Next语句、Do···Loop语句和While···End While语句等。[34]
If···Then···Else语句
If···Then···Else 语句根据表达式的值有条件地执行一组语句。If···Then···Else语句分为单行格式和多行格式。
' Multiline syntax: If condition [ Then ] [ statements ] [ ElseIf elseifcondition [ Then ] [ elseifstatements ] ] [ Else [ elsestatements ] ] End If ' Single-line syntax: If condition Then [ statements ] [ Else [ elsestatements ] ]
| 代码说明[36] | |
|---|---|
| 术语 | 定义 |
| condition | 必需。 表达式。 计算结果必须为 True 或 False,或者计算结果为可隐式转换为 Boolean 的数据类型 |
| Then | 在单行语法中是必需的;在多行语法中是可选的 |
| statements | 可选。如果后面If的一个或多个语句计算结果为True,则执行conditionThen |
| elseifcondition | 如果存在 ElseIf,则为必需。 表达式。 计算结果必须为 True 或 False,或者计算结果为可隐式转换为 Boolean 的数据类型 |
| elseifstatements | 可选。 如果后面ElseIf的一个或多个语句 计算结果为True,则执行elseifconditionThen |
| elsestatements | 可选。 如果先前的 condition 或 elseifcondition 表达式没有被计算为 True,则执行一个或多个语句 |
| End If | 终止 If...Then...Else 块的多行版本 |
Select···Case语句
Select···Case 语句根据表达式的值执行若干组语句中的某一组。[34]示例:
Select [ Case ] testexpression [ Case expressionlist [ statements ] ] [ Case Else [ elsestatements ] ] ]
| 代码说明[37] | |
|---|---|
| testexpression | 必需,表达式,计算结果必须为基本数据类型 |
| expressionlist | 在Case语句中是必需的,表示 testexpression的匹配值的表达式子句列表,多个表达式子句用逗号分隔 |
| statements | 可选, Case后面的一个或多个语句,在 testexpression 与 expressionlist 中的任何子句匹配时运行 |
| elsestatements | 可选,Case Else 后面的一个或多个语句,在 testexpression 与任何 Case 语句的 expressionlist 中的任何子句都不匹配时运行 |
| End Select | 终止 Select...Case 构造的定义 |
For···Next语句
使用 For···Next 实现多次重复一组语句的流程。[38]语法如下:
For counter [ As datatype ] = start To end [ Step step ] [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ counter ]
| 代码说明[38] | |
|---|---|
| 术语 | 定义 |
| counter | 必需,是数值变量和循环的控制变量 |
| datatype | 可选,是counter的数据类型 |
| start | 必需,数值表达式,counter的初始值 |
| end | 必需,数值表达式,counter的最终值 |
| step | 可选,数值表达式,递增counter的量 |
| statements | 可选,在For和Next之间运行指定次数的一个或多个语句 |
| Continue For | 可选,将控制转移到下一个循环迭代 |
| Exit For | 可选,将控制转移到For循环外 |
| Next | 必需,终止For循环的定义 |
For Each···Next语句
For Each···Next语句为集合或数组的每一个元素重复一组语句。语法如下:[39]
For Each element [ As datatype ] In group [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ element ]
| 代码说明[39] | |
|---|---|
| 术语 | 定义 |
| element | 在 For Each 语句中是必需的, 在 Next 语句中是可选的。 变量。 用于循环访问集合中的元素 |
| datatype | 如果 Option Infer 为 on(默认值)或 element 已声明,则是可选的;如果 Option Infer 为 off且element 尚未声明,则是必需的。是element的数据类型 |
| group | 必需, 类型是集合类型或对象的变量。 引用要对其重复 statements 的集合 |
| statements | 可选, For Each 与 Next 之间的一个或多个语句,会对 group 中的每个项运行 |
| Continue For | 可选, 将控制转移到 For Each 循环的开头 |
| Exit For | 可选, 将控制转移到 For Each 循环外 |
| Next | 必需, 终止 For Each 循环的定义 |
Do···Loop语句
Do···Loop语句用于当Boolean条件为True或在条件变为True之前,重复语句块。语法如下:[40]
Do [ { While | Until } condition ] [ statements ] [ Continue Do ] [ statements ] [ Exit Do ] [ statements ] Loop ' -or- Do [ statements ] [ Continue Do ] [ statements ] [ Exit Do ] [ statements ] Loop [ { While | Until } condition ]
| 代码说明[40] | |
|---|---|
| 术语 | 定义 |
| Do | 必需,开始 Do 循环的定义 |
| While | 如果使用 Until,则无法提供。 重复循环,直到 condition 为 False |
| Until | 如果使用 While,则无法提供。 重复循环,直到 condition 为 True |
| condition | 可选, Boolean 表达式。 如果 condition 为 Nothing,则 Visual Basic 将其视为 False |
| statements | 可选,一个或多个重复的语句,或在 condition 为 True 之前重复 |
| Continue Do | 可选, 将控制转移到 Do 循环的下一次迭代 |
| Exit Do | 可选,将控制转移到 Do 循环外 |
| Loop | 必需,终止 Do 循环的定义 |
While···End While语句
While···End While在给定条件为True时运行一系列语句。语法如下:
While condition [statements] [Continue While] [statements] [Exit While] [statements] End While
| 代码说明[41] | |
|---|---|
| 术语 | 定义 |
| condition | 必需,Boolean 表达式。 如果 condition 为 Nothing,则 Visual Basic 将其视为 False |
| statements | 可选,While 后面的一个或多个语句,每次在 condition 为 True 时运行 |
| Continue While | 可选,将控制转移到 While 块的下一次迭代 |
| Exit While | 可选,将控制转移到 While 块外 |
| End While | 必需,终止 While 块的定义 |
过程和参数
过程是结构化程序设计的一个重要组成部分,所有的操作代码都应该放在过程内部,过程是指括在过程声明语句和End语句中的一组代码语句块的总和。过程一经定义之后,可以在其他代码中被调用。Visual Basic中的过程有三种类型:Sub过程、Function过程和Property过程。[42][43]
Sub过程
Sub过程也叫事件过程,事件过程名为“对象名_动作”,用Sub语句声明,以End Sub语句结束。下面代码是一个典型的事件过程:[43]
Private Sub Command1_Click() Form1.Circle(120,120),r End Sub '对象名是Command1(命令按钮1),动作是Click(单击),这个事件过程: '当单击命令按钮时在窗体上以(120,120)为圆心,画一个半径为r的圆 //窗体事件的语法结构 Private Sub Form_Eventname(arguments) statements End Sub //控件事件过程的语法结构 Private Sub Controlname_Eventname(arguments) statements End Sub
Function过程
Function过程又称函数过程,分为内部函数和用户自定义函数两种类型,用Function语句声明,以End Function结束。[43]
函数过程代码示例:
//定义函数过程 [Private|Public][Static]Function ProcedureName(arguments) [As type] Statements End Function //调用函数过程三种语法: VarName= ProcedureName([argument list])'语法1 Call ProcedureName([argument list])'语法2 ProcedureName [argument list]'语法3
Property过程
Property过程又称属性过程,对应于属性的读写操作,属性过程分为三种:Property Get过程、Property Let过程、Property Set过程。Get用来处理从属性中读取数据的操作,Let和Set处理对属性赋值的操作,Let用于一般类型的属性,Set用于对象类型的属性。用Property语句声明,以End Property结束。[43]
属性过程代码示例:
//用一个字符串返回画笔的当前颜色 Property Get PenColor()As String Select Case CurrentColor Case RED PenColor = "Red" Case GREEN PenColor = "Green" Case BLUE PenColor = "Blue" End Select End Property //设置画笔颜色属性 Property Let PenColor(ColorName As String) Select Case ColorName Case "Red" CurrentColor = RED Case "Red" CurrentColor = GREEN Case "Red" CurrentColor = BLUE Case Else CurrentColor = BLACK '设为默认值 End Select End Property //定义对象应用的属性过程 Property Set Pen(P As Object) Set CurrentPen = P End Property
参数
过程中的代码需要某些关于程序状态的信息才能完成所执行的工作,信息包括在调用过程时传递到过程内的变量。当将变量传递到过程时,称变量为参数。参数的传递方式有两种:按值传递参数和按地址传递参数。按值传递参数时,传递的是变量的副本,如果过程中改变了这个值,则所作变动只影响副本而不是影响变量本身,用ByVal关键字传递。而按地址传递参数时,过程用变量的内存地址去访问实际变量的内容,可以改变变量值,用ByRef关键字进行传递。[43]
参数传递示例代码:
Private Sub Form_Click() Dim x As Integer x=4 Print "Before Call Test:x=",x Call Test(x) Print "After Call Test:x=",x End Sub Sub Test (ByVal I as Integer) I = I+1 End Sub //ByVal传递输出结果两者都为4 Sub Test(ByRef I As Integer) I = I+1 End Sub //ByRef传递,输出结果二者分别为:4和5
概念和使用
函数(Function)是能够实现一定功能的一段程序,由系统进行封装,程序员使用时只能看到函数名、参数和返回值等信息。使用时,程序员无须了解函数过程的实现细节,只需了解函数的参数特征和返回值特征即可。函数分为有参函数和无参函数,是过程的另一种形式,Visual Basic提供了许多内部函数。函数的使用称为函数调用,调用时需要注意以下几点:参数的个数及参数特征;数据类型应与参数要求类型一致;注意函数参数的取值范围;函数的返回值可以直接用于表达式中,参与运算。[25]
内置函数
| 内置函数[44][45][46] | |||
|---|---|---|---|
| 转换函数: Asc() AscW() CBool() CByte() CChar() CDate() CDbl() CDec() Chr() ChrW() CInt() CLong() CObj() CSByte() CShort() CSng() Cstr() CType Function() CUInt() CULng() CUShort() Format() Hex() | Oct() Str() Val() 数学函数: Abs() Acos() Asin() Atan() Atan2() BigMul() Ceiling() Cos() Cosh() DivRem() Exp() Floor() IEEERemainder() Log() Log10() Max() Min() Pow() Round() Sign() | Sin() Sinh() Sqrt() Tan() Tanh() Truncate() Acosh() Asinh() Atanh() BitDecrement() BitIncrement() Cbrt() Clamp() CopySign() FusedMultiplyAdd() ILogB() Log2() MaxMagnitude() MinMagnitude() ScaleB() 字符串函数: Asc, AscW() Chr, ChrW() Filter() Format() | FormatCurrency() FormatDateTime() FormatNumber() FormatPercent() InStr() InStrRev() Join() LCase() Left() Len() LSet() LTrim() Mid() Replace() Right() RSet() RTrim() Space() Split() StrComp() StrConv() StrDup() StrReverse() Trim() UCase() |
面向对象的程序设计思想
Visual Basic中用来构成图形用户界面的可视化控件,就是“对象”,对象封装了程序和数据。[10]不同的对象在程序中所赋予的功能是不同的。[3]把面向对象的思想应用到软件中指导软件开发,能直接在程序界面画出控件,并设置空间的属性,建立的对象属性是可视的,不必编写建立和描述每个对象的程序代码,与编写完整的代码比较,可以较少程序语句。[47]
可视化的程序设计语言
Visual Basic采用可视化的图形用户界面GUI(Graphical User Interface),开发人员利用系统提供的大量可视化控件,按设计要求的屏幕布局,在屏幕上可以画出各种图形对象“部件”,并设置这些图形对象的树形,Visual Basic便自动产生界面设计代码,程序设计人员只需要编写实现程序功能的那部分代码,从而大大提高了程序设计的效率。[3]
结构化的程序设计语言
结构化的程序设计语言,能够方便实现“自顶向下、分而治之、模块化”的程序设计方法,Visual Basic是在结构化的BASIC语言基础上发展起来的,具有高级程序设计语言的结构化、丰富的数据类型、众多的内部函数,便于程序的模块化、结构化设计。结构清晰且简单易学,在输入代码的同时,编辑器自动进行语法检查,设计过程中可以随时运行程序,调试并改正错误,整个应用程序设计好之后,可以编译生成可执行文件(.exe),脱离VB环境,直接在Windows环境下运行。[48]
开放的数据库功能与网络支持
Viusal Basic系统具有很强的数据库管理功能,不仅可以管理MS Access格式的数据库,还能访问其他外部数据库,如FoxPro、Dbase、Paradox等格式的数据库。Visual Basic还提供了开放式数据连接功能,可以通过直接访问或建立的方式使用并操作后台大型网络数据库。在应用程序中,可以使用结构化查询语言直接访问服务器上的数据,并提供简单的面向对象的库操作命令、所拥护数据库的枷锁机制和网络数据库编程技术,为单机上运行的数据库提供结构化查询语言网络接口。[48]
事件驱动的编程方式
事件驱动是增强程序图形界面交互性的主要方法,利用用户的动作或行为控制程序运行的流向。程序员只需要编写响应用户动作的代码,各个动作之间不一定有联系,代码短、易编写、易维护。[49]Visual Basic通过事件来执行对象的操作,对象与程序代码通过事件及事件过程来联系。一个对象可以感知和接收多个不同类型的事件,每个事件均能驱动一段程序或事件过程,完成对象响应事件的工作,从而实现一个预编程的功能。[3]
Visual Basic编程没有明显的主程序概念,程序员要做的就是面向不同的对象分别编写他们的事件过程,整个Visual Basic应用程序就是由这些彼此相互独立的事件过程构成,事件过程的执行与否以及执行的顺序取决于操作时用户所引发的事件,若用户为触发任何时间,则系统将处于等待状态。[3]
交互式程序设计
传统的高级语言编程需要经过编码、编译和测试代码三个步骤,每一个步骤需要调用专门的处理程序,而Visual Basic将这三个步骤的操作都集中在它的集成开发环境内统一处理,使得这三个步骤之间不再有明显的界限,方便了设计人员的使用。大多数语言中,设计人员在编写代码时产生错误,在该程序编译时才能够被编译器捕获,这样造成了编码效率的局限性,而Visual Basic则采用交互式的在线检测式,在设计人员输入代码时便对其进行解释,即使捕获并突出显示其语法或拼写错误,设计人员能够及时发现错误并改正。[3]
开发环境和工具
Visual Basic提供了一个强大的集成开发环境(IDE),包括代码编辑器、表单设计器、调试工具和项目管理工具。[50]

开发Visual Basic应用程序,可以使用文本编辑器编写代码,并使用编译器进行编译、运行,也可以使用微软集成开发工具:SDK软件开发工具包,包括开发人员编写、生成、测试和部署应用程序时所需要的工具;Microsoft Visual Studio,开发应用软件的平台,提供开发工具和功能、Xamarin Studio和Visual Studio Code等。[51]
编译器
Visual Basic的一种运行方式是编译方式,是系统读取Visual Basic程序中全部代码,将其转换(编译)成机器代码,并保存在扩展名为.exe的可执行文件中,以便可以脱离Visual Basic环境运行该程序。[52]Visual Basic支持的编译器有Visual Studio和.NET。[53]
| 编译器 | 编译器版本 | 语言版本 |
|---|---|---|
| Visual Studio | 2019-2022 | 最高至Visual Basic 16 |
| .NET | 6.0-7.0 |
解释器
Visual Basic中另一种运行方式是解释方式,是系统读取触发事件过程的代码,将程序代码逐句转换(翻译)为机器代码,译出一句就立即执行一句,边解释边执行,转换后的机器代码不保留,如需再次运行程序,还要重新翻译。[52]
异常处理
Visual Basic同时支持结构化和非结构化的异常处理,能够在程序运行发生异常时得到有效的处理,使程序能够继续执行下去。程序中的异常可分为三种:语法错误、运行时错误和逻辑错误。[42]
结构化异常处理
结构化异常处理使用Try···Catch···Finally语句,语法如下:
Try '可能产生异常的语句 Catch[optional filters] '处理异常的语句 [Additional Catch blocks] Finally '退出Try块后立即执行的雨具 End Try
将异常语句放在Try块中,如果产生异常,就会被送到Catch语句中,每个Catch语句都带有一个过滤条件,也可以没有。Visual Basic从上到下依次检查每个Catch块,如果抛出的异常与过滤条件相匹配,执行这个Catch块中的语句处理捕获的异常,Catch块中没有过滤条件则接收所有异常。Finally块中的代码将在处理完Try块后执行,可以将诸如关闭文件、释放对象实例等做清理工作的代码放在Finally块中。[42]
关键字throw用来生成终止错误,使用throw关键字停止对命令、函数或脚本的处理,可以在if语句的脚本块中使用throw关键字来响应条件,或者用在try···catch···finally语句的catch块中,throw关键字可以引发任何对象,例如用户消息字符串或导致了错误的对象。[54]
throw关键字的语法如下:
throw [<expression>]
非结构化异常处理
非结构化异常处理使用On Error语句,On Error语句放在所要检查的代码块的最前面。当On Error语句所处理的代码块中产生一个异常时,控制权会立即转交到On Error语句所指定的程序行处理发生的异常。On Error语句分为三种类型:On Error GoTo Line语句、On Error Resume Next语句、On Error GoTo 0语句以及On Error GoTo-1语句。[42]
'On Error GoTo Line语句处理异常,Line表示行号或行标签 Sub TestSub On Error GoTo ErrorHandler //ErrorHandler表示代码行标签 '可能产生异常的代码 Exit Sub ErrorHandler '异常处理代码 Resume End Sub
On Error Resume Next语句表示其所处理的代码块中遇到异常就将其忽略,执行下面的代码。On Error GoTo 0语句表示禁用当前过程内的异常处理器,如果没有该语句,异常处理器将在过程退出时禁用。而On Error GoTo-1语句表示禁用当前过程中的异常,不包含该语句时,异常会在过程退出时自动禁用。[42]
示例,名为DivideByZero的异常处理器用于被0除的异常。
Dim x As Integer,y As Integer,z As Integer On Error GoTo DivideByZero '可能产生被0除异常的代码 x=2 y=0 z=x\y '禁用异常处理 On Error GoTo 0 Console.WriteLine(x&"/"&y"="&z) Exit Sub DividByZero: Console.WriteLine("错误:除数为零!") y=2 Resume End Sub
标准库
标准库是指由编程语言自带的一系列函数和类,程序可以从符合标准的标准库实现中调用大量函数。 这些函数执行服务(如输入和输出),并提供常用操作的高效实现。[55]
| 名称 | 说明 |
|---|---|
| Microsoft.VisualBasic Namespace | 包含构成 Visual Basic 运行时库的类、模块、常量和枚举。 这些库成员提供可在代码中使用的过程、属性和常量值。 每个模块和类表示一种特定的功能类别 |
| System Namespace | 包含定义常用值和引用数据类型、事件和事件处理程序、接口、属性以及处理异常的基本类和基类 |
| System.Collections Namespace | 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类 |
| System.IO Namespace | 包含允许读取和写入文件和数据流的类型,以及提供基本文件和目录支持的类型 |
| System.Diagnostics Namespace | 提供允许你与系统进程、事件日志和性能计数器进行交互的类 |
| System.Drawing Namespace | 提供对 GDI + 基本图形功能的访问权限 |
| System.Windows.Forms Namespace | 包含用于创建基于 Windows 的应用程序的类,以充分利用 Microsoft Windows 操作系统中提供的丰富的用户界面功能 |
| Microsoft.VisualBasic Namespace | 包含支持 Visual Basic 中的 Visual Basic 运行时的类型 |
| Microsoft.VisualBasic.CompilerServices Namespace | 包含支持 Visual Basic 编译器的仅供内部使用的类型 |
| Microsoft.VisualBasic.FileIO Namespace | 包含支持 Visual Basic 中 My 文件系统对象的类型 |
| System.ComponentModel Namespace | 提供用于实现组件和控件的运行时和设计时行为的类。 此命名空间包括用于特性和类型转换器的实现、数据源绑定和组件授权的基类和接口 |
| System.Diagnostics.CodeAnalysis Namespace | 包含用于与代码分析工具交互的类。 这些工具用于分析代码与编码约定(如命名规则或安全性规则)的一致性 |
| System.Text Namespace | 包含表示 ASCII 和 Unicode 字符编码的类;用于字符块和字节块相互转换的抽象基类;以及无需创建 String 的中间实例即可操作 String 对象并设置其格式的帮助程序类 |
| System.Web Namespace | 对于 .NET Core 和 .NET 5+,此命名空间包含 HttpUtility 类。 对于.NET Framework,此命名空间包含启用浏览器-服务器通信的类和接口。 这些类包括 HttpRequest 类,该类提供有关当前 HTTP 请求的大量信息; HttpResponse 类,用于管理对客户端的 HTTP 输出;以及 HttpServerUtility 提供对服务器端实用工具和进程的访问的 类。 System.Web还包括.NET Framework中的 Cookie 操作、文件传输、异常信息和输出缓存控制的类 |
| System.Xml Namespace | 提供基于标准的 XML 处理支持 |
| System.Threading Namespace | 提供支持多线程编程的类和接口。 除同步线程活动和数据访问的类(Mutex、Monitor、 Interlocked、AutoResetEvent等)之外,此命名空间还包含一个 ThreadPool 类(它可让用户使用系统提供的线程池)和一个 Timer 类(在线程池线程上执行回调方法) |
| System.Security Namespace | 提供公共语言运行时安全系统的基础结构,包括权限的基类 |
| System.Runtime Namespace | 包含支持不同命名空间(如 System、Runtime 和 Security 命名空间)的高级类型 |
| System.Dynamic Namespace | 提供支持动态语言运行时的类和接口 |
Visual Basic for Applications
Visual Basic for Applications(即VBA)是基于 Visual basic发展而来的,与VB具有相似的语言结构。从语言结构上讲,VBA是VB的一个子集,它们的语法结构是一样的。两者的开发环境也几乎相同。但是,VB是独立的开发工具,它不需要依附于任何其他应用程序,它有自己完全独立的工作环境和编译、链接系统。VBA是一种内置在微软Office办公软件中的编程语言,依托于Office软件而不能独立运行。[57]通过VBA可以实现各种Office软件操作的自动化,如在 Access中,可以通过VBA编写模块来满足特定的需要。[58]

Visual Basic Script
Visual Basic Script简称VB Script是微软创建的一种脚本语言,使用同Visual Basic一样的语法。[59]VB script源自Visual Basic for Applicant,继承了VBA的大部分功能,包括对数学运算、数组、流控制、数据转换、COM对象、过程以及日期等的支持,但微软最初将VBscript设计为Web的脚本语言,因此取消了直接I/O函数并剥离了对类型的支持以提高VBScript的处理速度,因此,VBScript不支持显示类型,并且不包含用于直接访问客户端磁盘的本机命令,但后来成为通过Windows脚本主机编写面向Windows的批处理文件的流行语言。[60]
Visual Basic.NET
Visual Basic.Net是Visual Basic 6.0的升级,是在.NET平台上编程的一种面向对象的程序设计语言。[61]Visual Basic.Net语言主要用来构建在.Net Framework上运行的各种安全、可靠的应用程序。[51]能更好地与Python及Ruby等动态语言互通操作,使得其语言表达逻辑和自然语言的表达非常相似。[62]
OpenOffice Basic
OpenOffice Basic是一种源自Basic系列的编程语言,OpenOffice Basic 扩充了OpenOffice标准功能。可以在 OpenOffice Basic 中自动执行常见任务,可以链接到其他程序(例如,链接到数据库服务器),还可以通过按下某个按钮来执行复杂活动(使用预定义脚本)。OpenOffice Basic可以对所有OpenOffice功能进行完全访问,支持所有功能,还可以修改文档类型,以及提供创建个人对话框窗口的选项。OpenOffice Basic 编程语言有OpenOffice Basic 语言、运行时库、Apache OpenOffice API(应用程序编程接口)和对话框编辑器四个部分组成。[63]
Gambas
Gambas是一个面向对象的BASIC语言分支和一个附带的IDE,能在Linux以及其他 Unix-like 计算机操作系统中运行。[64]它提供一个与Visual Basic相似的用户体验。Gambas被设计成为一个针对迁移到Linux平台上Visual Basic开发者的Visual Basic替代产品。[65]
WinWrap Basic
WinWrap Basic 是一个低成本、功能强的 .NET/WPF/COM 组件,是 ActiveX、VBScript、VB6、VBA、Sax Basic 和 VSTA 脚本的替代品。[66]它允许使用Visual Basic语言构建Windows应用程序。它支持将Web应用程序转换为本地应用程序,使其可以在没有网络连接的情况下运行。[67]
LotusScript
LotusScript 是一种嵌入式的Basic脚本语言,具有语言扩展功能特色。[68]是Visual Basic的通用语言,主要应用于Notes的客户端应用程序开发中。由于Lo tusScript与Java的后台类库基本一致,又被众多的 Notes开发人员所熟悉,因此LotusScript在Domino Web 开发中得到了广泛的应用[69]
Corel WordPerfect Office
Corel Word Perfect Office是一款办公软件, 由文字处理软件“WordPerfect”、表格计算软件“Quattro Pro”以及幻灯演示制作程序“Presentations”组成。[70]1998年,Microsoft与Corel公司达成协议,在Corel公司产品中集成MicrosoftVisual Basic for Applications(VBA)。Corel公司宣布了Corel WordPerfect套件和CorelDRAW等不同产品集成VBA的计划。[71]
WordBasic
WordBasic是Word对象模型中的一个属性,该属性返回一个具有全部 WordBasic语句和函数的对象;该对象使WordBasic宏可在Word中运行。Word的每个元素(如文档、段落、字段和书签)都可以由Visual Basic中的对象表示,WordBasic语言由大约 900 个命令的平面列表组成,而 Visual Basic 由对象的层次结构组成,其中每个对象都公开一组特定的方法和属性, (类似于 WordBasic) 中的语句和函数。 大多数WordBasic命令在任何时候都可运行,而在Visual Basic中,只能使用在给定时刻有效的对象的方法和属性。[72]
Web网页开发
Visual Basic 6.0中,可以通过使用专用设计窗口来建立网页,以便与应用程序发生联系;也可以调入已存在的网页进行修改。在Visual Basic(VB)中建立网页时,可以将HTML元素放在设计器中,并布置它们的位置,用这种方法建立网页时,无需了解HTML标签,Visual Basic为网页中的每个元素建立标签和属性,即可完成特点功能的网页。Visual Basic可以将现有的HTML网页调入,进行重新调整用户界面、增加、删除网页上的元素。可以在Visual Basic中用代码处理动态网页DHTML发生的事件,响应网页中的元素所发生的事件。在Visual Basic中创建DHTML应用时,网页中的每一个HTML元素可作为独立的对象进行操作,可以设置它们的属性,调用它们的方法来修改特征。[73]
应用程序开发
Visual Basic完全可视化的开发环境,事件驱动的编程机制使得编程易学易用,其中Visual Basic 2005构建的应用程序不仅能执行任务,而且具有多变的外观。使用其可以为Windows操作系统、Web、手持设备以及其他环境和设置创建应用程序,它最重要的优势是提高了开发工作中使用数据库信息和创建Interface解决方案时的效率。[74]
游戏开发
Visual Basic提供的集界面设计、编写代码、程序调试等于一体的集成开发环境,可以开发出多种具有图形界面的应用程序,以Visual Basic编制动画游戏,能够按程序代码延时,受程序代码的操作,在游戏软件的制作中具有重要意义。游戏界面的设计可通过Visual Basic提供的控件进行设计成一个窗体,窗体上的属性可以自定义。通过编码实现游戏过程和事件的发生,使用函数进行实现功能和绘图等。[75]
用Visual Basic设计的简单游戏——黑白棋:
在窗体建立三个菜单,调用画棋盘函数过程来画出棋盘,然后调用Click命令实现单击事件,设计Timer事件的计时器,用函数进行绘制图形界面。执行程序后,游戏设计实现。[75]


数据库应用程序开发
Visual Basic在数据库方面提供了功能和工具,利用Visual Basic提供的数据库管理功能,可以进行数据库应用程序的开发。用Visual Basic的可视化数据管理器VisData创建数据库,数据库的查询语言SQL语言没有屏幕处理或用户输入输出的能力,需要嵌入到Visual Basic语言中调用,提供访问数据库的标准方法,对于Visual Basic的关系数据库,数据存入数据库后,可以用SQL同数据库进行交互。Visual Basic中有三种数据访问的接口:ActiveX数据对象、远程数据对象和数据访问对象,与三个接口响应的三种可视化数据访问控件为ADO Data控件、Data控件和RDO控件[76]
自动化和脚本编程
自动化是组件对象模型 (COM) 的一项功能,它是可供应用程序用来向开发工具、宏语言和其他支持自动化的应用程序公开其对象的行业标准技术。当应用程序支持自动化时,可通过 Visual Basic 访问应用程序所公开的对象。[77]Visual Basic提供的字符串处理函数,如 Instr,Mid,Left,Format等,可以实现对字符串的比较、挑选、截取、抽取等,从而完成脚本所有关键字的解析和处理。[78]Visual Basic Script就是微软创建的一种脚本语言,使用同Visual Basic一样的语法。[59]
内嵌控件的应用
多媒体技术的普及,Visual Basic为了方便用户的开发,提供了功能较强的多媒体控件。其中较为简单的有MMControl控件,用于显示媒体播放的进度等信息以及控制媒体播放和结束。[79]
网络的广泛应用使得许多语言都提供了网络程序的功能。Winsock控件是Visual Basic提供网络编程工具中的一种,它建立在TCP、UDP协议的基础上,完成与远程计算机的通信,使用该控件可以在很短的时间内创建一个简单的客户机/服务器程序。用户通过设置控件的属性并调用其方法即可连接到一台远程计算机上,并且还可以双向交换数据。[79]
反对观点
Visual Basic是一个充满争议的语言,很多批评家评判微软简单地拷贝了Basic语言的思想到Visual Basic中,计算机科学家Edsger Wybe Dijkstra说:“如果一个学生最早学过Basic,那么几乎不可能让他学会优秀的编程,因为这些已经放弃了重生的希望。”Visual Basic一开始就是一种简单的语言,所以很多人自学了Visual Basic,但是零基础的编程操作是他们不能掌握良好的编程习惯。并且一些C++和Java中的特性并没有在Visual Basic中出现,难以编写多线程程序和产品无法跨平台等问题使得Visual Basic不能胜任大型程序的开发。[80]
支持观点
很多Visual Basic的支持者解释说Visual Basic的易用性就是它最大的优势,能使得经验丰富的程序员或者刚入门的人都能用自己的方式快速开发程序,而且Visual Basic的程序与数据库连接简单,利用控件即可绑定数据库,可以掌握数据库的所有信息而不用写一行代码。[81]
参考资料 81
- Visual Basic 文档 — microsoft
- vb是什么意思?下面就来为大家解释解释 — 中国工业网
- 参考 3
- Visual Studio 2019 version 16.9 Release Notes — microsoft
- Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 — microsoft
- https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKgchrJ08w1e7F1IFNsBV5UtgFqMZVQ0BBqDdCAgzatVt7NHwnerOxQ5o7Qym8FO-LNWY86-v0jCf&uniplatform=NZKPT
- 微软不再发展Visual Basic编程语言:它曾经的辉煌你可知? — 快科技
- ?VB编程宣告终结,微软:不再提供新功能 — 澎湃新闻
- https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKibYlV5Vjs7ir5D84hng_y4D11vwp0rrtWlbIY3taltbygVeRcU4UBAYHcmWAQs_sE9aTmm31uqj&uniplatform=NZKPT
- https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKgchrJ08w1e75TZJapvoLK1qsBfv2gipcYafeJGv4NlFIL5KnqmhE4lNzMkcallMVea4LQd6sGvj&uniplatform=NZKPT
- https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKgchrJ08w1e7eeyE9jLkqq_wn8E9XRjU8IdrEkMHG_JTBN32Oa8BTgPtgGAG6SQeb4W_XqiNHtH8&uniplatform=NZKPT
- https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKjkpgKvIT9NkGsvn6cq9Bo1go6sPLWmWdv2ZooHsz5kFztj5SZhOe2tzVQxee5--CwhVxXhYOIhJ&uniplatform=NZKPT
- 参考 13
- 参考 14
- https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKgchrJ08w1e7aLpFYbsPrqF1FkUqIUEHzx0vXW1VbJBbLaAXYp0Qm-DUhUG_fzavlDxlHfhyHLM1&uniplatform=NZKPT
- Visual Basic 2005 简介 — microsoft
- Visual Basic 中的新增功能 — microsoft
- Visual Basic 2010 中的新增功能 — microsoft
- Visual Studio 2012 中 Visual Basic 的新增功能 — microsoft
- Welcome to Visual Studio 2015 — microsoft
- What's new in Visual Studio 2019 — microsoft
- Microsoft Visual Basic 4.0 — winworldpc
- 微软停止VB6免费技术支持 百名MVP上书抗议 — 新浪科技
- Visual Basic 的新增功能 — microsoft
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000005981938&d=FFA2F282D0C3312916A78DEE81CA8BE2&fenlei=1817040302
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000017241564&d=51D4207D5549277AB98219268EB6668F
- 参考 27
- 参考 28
- 参考 29
- 参考 30
- Visual Basic 命名规则 — microsoft
- Visual Basic Keywords — tutlane
- 关键字 (Visual Basic) — microsoft
- 参考 34
- 参考 35
- If...Then...Else 语句 (Visual Basic) — microsoft
- Select...Case 语句 (Visual Basic) — microsoft
- For...Next 语句 (Visual Basic) — microsoft
- For Each...Next 语句 (Visual Basic) — microsoft
- Do...Loop 语句 (Visual Basic) — microsoft
- While...End While 语句 (Visual Basic) — microsoft
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000030338388&d=009B166E855D2E054A31A8ED6E4E0E0A&fenlei=1817040302
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000005329532&d=E9CA9D6A8246FE555A5E60720004FC4B&fenlei=1817040302
- 字符串函数 (Visual Basic) — microsoft
- 数学函数 (Visual Basic) — microsoft
- 转换函数 (Visual Basic) — microsoft
- https://d.wanfangdata.com.cn/Thesis/ChJUaGVzaXNOZXdTMjAyMzA5MDESCUQwMTk5MDkzMxoIdDNhZmk4d3g%3D
- 参考 48
- https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMwODMxEhN5cXliYnpoeWpsMjAwNjA0MDA1Ggh4cjQxMjFpNQ%3D%3D
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000017241564&d=51D4207D5549277AB98219268EB6668F
- Visual Basic集成开发环境 — 清华大学出版社
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000006579086&d=5B4309460304125929BBA5C165B9AEA9&fenlei=1817040302
- Skip to main content Skip to search — synopsys
- 关于Throw — microsoft
- C++ 标准库参考 (STL) — microsoft
- .NET API 浏览器 — microsoft
- 403 Forbidden — 人民邮电报
- 参考 58
- 中国科普博览_电信博物馆 — 中国科普博览
- Visual Basic Scripting (VBScript) — activexperts
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000002610827&d=F2AAFAE53DA827C1099B94F97ED64423&fenlei=1817040302
- https://kns.cnki.net/kcms2/article/abstract?v=3uoqIhG8C44YLTlOAiTRKibYlV5Vjs7ir5D84hng_y4D11vwp0rrtSOafjMnUgeFBnBR8LbWOmJTIegEGrOiWBizetQ62XVT&uniplatform=NZKPT
- Apache OpenOffice BASIC 编程指南 — openoffice
- Gambas不安全临时文件创建漏洞 — 国家信息安全漏洞平台
- 全知识 — allhistory
- winwrap首页 — winwrap
- web变成exe — yimenapp
- IBM Documentation — IBM
- https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMwODMxEg96Z2pyZG4yMDA0MDIwMTkaCDU0MnNibGQ5
- Corel WordPerfect Office X4 14新特性 — 新浪科技
- Microsoft宣布与Corel建立VBA伙伴关系 — 知网空间
- WordBasic 和 Visual Basic 在概念上的区别 — microsoft
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000015128826&d=431AD27100FA5D9AA38114365B9640F1&fenlei=181704030701
- https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMwODMxEg1ranh4MjAxMTMyNDQ0Ggh4ZGVkcjVrOQ%3D%3D
- https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMwODMxEg1ranh4MjAxMTMyNDQ0Ggh0cGxkcHJ2Nw%3D%3D
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000018845850&d=E12BE0091D4F2217BB268737BEBB1EB8&fenlei=1817040302
- 了解自动化 — microsoft
- https://d.wanfangdata.com.cn/Periodical/ChlQZXJpb2RpY2FsQ0hJTmV3UzIwMjMwODMxEg5qc2p5eTIwMDd6MjA4ORoIaDNzYnhvZ2g%3D
- http://book.gzlib.org/views/specific/2929/bookDetail.jsp?dxNumber=000006548127&d=73D694DF35CD709CBB8953F26998F1C8&fenlei=1817040302
- 电脑义诊|Visual Basic 6.0:罪与罚 — 搜狐号
- VB及VBA编程语言历史及VB的特点简介-入门篇 — Office交流网