精华内容
下载资源
问答
  • VB常见错误类型和程序调试方法学习教案.pptx
  • 分享VB错误处理

    2019-05-01 13:27:03
    实际上可能出现的程序错误是很多的,但是它们基本上可以分为两种类型:一是编译错误;另一是运行期错误。编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。如果一个过程中包含了...
  • VB常见错误类型和程序调试方法PPT课件.pptx
  • 今晚帮一客户调试程序,VB6.0,运行报错:编译错误:用户定义类型未定义 原因:用到的库没有引用(看上去是Dictionary)。 解决方法: 工程-引用,把勾选需要引用的库。 问题解决。 ...

    今晚帮一客户调试程序,VB6.0,运行报错:编译错误:用户定义类型未定义

    原因:用到的库没有引用(看上去是Dictionary)。

    解决方法: 工程-引用,把勾选需要引用的库。

    问题解决。

     

     

    展开全文
  • VB数据类型(一)

    2021-12-10 21:46:23
    VB数据类型介绍

    VB数据类型——基本数据类型

    VB作为计算机高级语言之一,其基本数据类型主要包括如下:
    在这里插入图片描述

    VB中基本类型有字符型、数值型、布尔型和日期型,对于数值型,根据运算效率、所占内存空间以及精度要求,又划分为整数型、单精度型、双精度型、货币型和字节型

    在这里插入图片描述

    字符串

    定义:使用双引号括起来的若干个字符

    '以下全部为字符串
    "AAAA"
    "Hello world"
    "你好"
    "1111"
    ""
    

    声明

    Private A As string   '定义A为字符串数据类型
    

    说明
    String变量或参数是一个可变长度的字符串,可以自定义声明的字符串长度,格式如下:

    String  *size
    '例子
    Private A As string*4  '声明一个固定长度为4的字符型变量
    

    代码案例
    对于已定义长度的字符串变量,当赋值数据长度大于定义长度时,只保存其定义长度的数据,比如运行下面的程序时,只会显示hell。

    Private Sub From_Load()
    	Private A as string*4
    	A = "hello"
    	Msgbox A      
    

    数值型

    数值型分为整型、长整型、单精度浮点数、双精度浮点数、货币型和字节型。

    1111
    1.222222
    -4
    -4.6666666
    

    声明

    Private A As Integer   '定义A为整型
    Private B Ad Lng   
    

    说明

    所有数值型变量可以相互赋值转换,但在将浮点型或货币型数值赋予整型变量时,VB会自动将该数值的小数部分四舍五入之后去除,而不是直接去除

    Dim i As Integer
    i = 4.5848666666
    Msgbox i
    
    '输出结果为5'
    

    布尔型

    布尔型为逻辑类型,其变量值只有True和False,Yes/No等,对于声明为布尔类型的变量,其默认值为False

    Dim Condition as Boolean
    Msgbox Condition 
    '输出结果为False
    

    日期型

    存储日期或时间,可以表示的范围为100年1月1日到9999年12月31日,时间为00:00:00 -23:59:59

    当标识日期常数时,使用#括起来

    mydate = #5/14/1555#
    mydate = #1997-02-05#
    mydate = #65,5,29#
    

    对象型

    存储程序中的对象使用4字节保存对象相关的数据信息

    Dim a As Obj  '声明a作为一个对象'
    a = motor  '将Motor对象赋值给a,a可以对用motor的属性方法。Motor只是作为代码参考,不具有实际意义'
    
    

    变体型

    存储所有系统定义的数据类型,除了其他数据类型的特性外,还具有Empty、Null、Error特性

    Empty:区别于0、零长度字符串或者Null,变体类型的数据在没有赋值前默认值为Empty,在使用时,可以使用IsEmpty函数来测试变量的值

    Null:表示未知或丢失的数据。只能赋值给变体数据,如果将其赋给非变体数据的变量,将产生错误。如果表达式中含有Null,则整个表达式的计算结果为Null

    Error:标识已经发生过的过程中的错误状态

    展开全文
  • VB简单的程序设计”常见错误汇总一、“VB简单的程序设计”常见错误1.2常见错误和难点分析1.标点符号错误VB中只允许使用西文标点,任何中文标点符号在程序编译时产生"无效字符"错误,在该行以红色字显示。用户...

    “VB简单的程序设计”常见错误汇总

    一、“VB简单的程序设计”常见错误

    1.2 常见错误和难点分析

    1.标点符号错误

    在VB中只允许使用西文标点,任何中文标点符号在程序编译时产生"无效字符"错误,在该行以红色字显示。用户在进入VB后不要使用中文标点符号。中、西文状态下标点符号对照见下表所示。

    中、西状态下标点符号对照

    西文状态

    ,

    .

    '

    "

    ;

    _

    <

    中文状态

    '

    "

    ——

    2.字母和数字形状相似

    L的小写字母"1"和数字"l"形式几乎相同、O的小写字母"。"与数字"0"也难以区,这在输入代码时要十分注意,避免单独作为变量名使用。

    3.对象名称(Name)属性写错

    在窗体上创建的每个控件都有默认的名称,用于在程序中唯一地标识该控件对象。系统为每个创建的对象提供了默认的对象名,例如,Text1、Text2、Command1、Label1等。用户可以将属性窗口的(名称)属性改为自己所指定的可读性好的名称,如txtInput、txtOutput、

    cmdOk等。对初学者,由于程序较简单、控件对象使用较少,还是用默认的控件名较方便。

    当程序中的对象名写错时,系统显示"要求对象"的信息,并对出错的语句以黄色背景显示。用户可以在代码窗口的"对象列表"框检查该窗体所使用的对象。

    4.Name属性和Caption属性混淆

    Name属性的值用于在程序中唯一地标识该控件对象,在窗体上不可见;而Caption属性的值是在窗体上显示的内容。

    5.对象的属性名、方法名写错

    当程序中对象的属性名、方法名写错时,VB系统会显示"方法或数据成员未找到"的信息。在编写程序代码时,尽量使用自动列出成员功能,即当用户在输入控件对象名和句点后,系统自动列出该控件对象在运行模式下可用的属性和方法,用户按空格键或双击鼠标即可,这样既可减少输入也可防止此类错误出现。

    6.变量名写错

    用Dim声明的变量名,在后面的使用中表示同一变量而写错了变量名,VB编译时就认为是两个不同的变量。例如,下面程序段求1~100的和,结果放在Sum变量中:

    Dim sum As Integer,i As Integer

    Sum=0

    For i =1 to

    100

    Sum=Sun+i

    Next i

    Print Sum

    显示的结果为100。原因是累加和表达式Sum=Sun+i中的右边的变量名Sum写成Sun。VB对变量声明有两种方式,可以用变量声明语句显式声明,也可以用隐式声明,即不声明直接使用。上述变量名的写错,系统为两个不同的变量各自分配内存单元,造成计算结果不正确。因此,为防止此类错误产生,必须对变量声明采用限制其为显式声明方式,也就是在通用声明段加Option

    Explicit语句。

    7.语句书写位置错

    在VB中,除了在"通用声明"段利用Dim等对变量声明语句外,其他任何语句都应在事件过程中,否则运行时会显示"无效外部过程"的信息。若要对模块级变量进行初始化工作,则一般放在Form

    Load()事件过程中。

    8.无意形成控件数组

    若要在窗体上创建多个命令按钮,有些读者会先创建一个命令按钮控件,然后利用对该控件进行复制、粘贴,这时系统显示:“已经有一个控件为"Command1"。创建一个控件数组吗?”的信息,若单击"是"按钮,则系统创建了名称为Command1的控件数组。若要对该控件的

    Click事件过程编程,系统显示的框架是:

    Private Sub Command1_Click(Index As Integer)

    End Sub

    Index表示控件数组的下标。

    若非控件数组,Click事件过程的框架是:

    Private Sub Command1_Click()

    End Sub

    请注意直到学习第四章数组前,一律不使用控件数组。

    9.Print方法中定位问题

    定位通过Tab、Spc函数和最后的逗号、分号和无符号来控制。VB中通过Print方法中各参数的综合使用达到所需的结果,但初学者往往难以掌握。

    (1) Tab(n)与Spc(n)的区别

    Tab(n)从最左第1列开始算起定位于第n列,若当前打印位置已超过n列,则定位于下一行的第n列,这是常常定位不好出现的问题。在格式定位中,Tab用得最多。

    Spc(n)从前一打印位置起空n个空格。例如,下面程序段显示了Tab与Spc的区别,效果如图所示。

    Private Sub Commandl_Click()

    Print "1234567890”,

    Print

    Tab(1);"**"';Tab(2);"%%%";spc(2);"$$$$"

    End Sub

    (2)

    紧凑格式";"分号的使用

    紧凑格式";",即输出项之间无间隔。但对于数值型,输出项之间系统自动空一列,而由于数值系统自动加符号位,因此,大于零的数值,实际空两列。对于字符型之间无空格。

    例如,下面程序段,效果如图所示。

    Private Sub Command1_Click()

    Print 1;-2;3

    Print"1234";"5678"

    Print"A";"B";"C";"D","E","F"

    End Sub

    从该例应区分数值和字符在紧凑格式输出的差异。

    10.打开工程时找不到对应的文件

    一般,一个再简单的应用程序也应由一个工程.vbp文件和一个窗体.frm文件组成。工程文件记录该工程内的所有文件(窗体.frm文件、标准模块.bas文件、类模块.cls文件等)的名称和所存放在磁盘上的路径。

    若在上机结束后,把文件复制到软盘上保存,但又少复制了某个文件,下次打开工程时就会显示"文件未找到"。也有在VB环境外,利用Windows资源管理器或DOS命令将窗体文件等改名,而工程文件内记录的还是原来的文件名,这样也会造成打开工程时显示"文件未找到"。

    解决此问题的方法:一是修改.vbp工程文件中的有关文件名:二是通过"工程"菜单的"添加窗体"中的"现存"选项,将改名后的窗体加入工程。

    二、表达式

    1.书写规则

    (1)运算符不能相邻。例a+-b是错误的。

    (2)乘号不能省略。例x 乘以y

    应写成:x*y

    (3)括号必须成对出现,均使用圆括号。

    (4)表达式从左到右在同一基准上书写,无高低、大小。

    2. 不同数据类型的转换

    运算结果的数据类型向精度高的数据类型靠.

    Integer< P>

    3.逻辑表达式书写错,在VB没有造成语法错而形成逻辑错

    例:数学表达式 3≤x<10 VB表达式为 3<=x<10

    问题在于VB中的逻辑量与数值量可互转

    4.同时给多个变量赋值,在VB没有造成语法错而形成逻辑错

    例 Dim x%,y%,z%

    x=y=z=1

    5. 标准函数名写错

    6.变量名写错

    检查方法:在通用声明段加Option Explicit

    7.语句书写位置错

    在通用声明段只能有Dim语句,不能有赋值等其他语句

    1.逻辑表达式书写错,在VB没有造成语法错而形成逻辑错

    例如,要将数学上表示变量x在一定数值范围内如3≤x<10,以VB的逻辑表达式表示,有的读者写成的VB表达式为:

    3<=x<10

    此时在其他语言中将产生语法错,而在VB中不产生语法错,程序能运行,但不管x的值为多少,表达式的值永远为True,这造成程序能正常运行的假象,其结果是不正确的。

    因为在VB中,当两个不同类型的变量或常量参加运算时,有自动向精度高的类型转换的功能。例如,逻辑常量True转换为数值型的值为-1,False为0;反之数值型非0转换为逻辑型的值为True,0为False。同样数字字符与数值运算,转换为数值型。

    例如,语句Print

    True+3 '显示的结果是2

    Print

    "123"+100 '显示的结果是223

    Print#5/1/2000#+3 '显示的结果是00-5-4

    根据此原因,表达式:

    3<=x <10

    (1)

    (2)

    值的计算过程是:首先根据x的值计算3<=x,结果总为True或False;然后该值(-1或0)与10比较永远为True。正确的VB表达式书写为:

    3<=x And x<10

    2.同时给多个变量赋值,在VB没有造成语法错而形成逻辑错

    例如,要同时给x,y,z三个整型变量赋初值1,有的读者写成如下赋值语句:

    x=y=z=1

    在C语言中,上述语句是可以实现同时对多个变量赋值,而在VB中规定一句赋值语句内只能给一个变量赋值,但上述语句并没有产生语法错,运行后x,y,z中的结果均为0。

    原因是VB将y=z=1作为一个表达式,再将表达式的结果赋值给x。在VB中默认数值型变量的初值为0,根据上面错误1的分析类推,因此表达式y=z=l的结果为0,所以x赋得的值为0、y、z变量的值为默认值o。

    3.标准函数名写错

    VB提供了很多标准函数,如IsNumeric()、Date()、LeR()等。当函数名写错时,如将

    IsNumeric写成IsNummeric,系统显示"子程序或函数未定义",并将该写错的函数名选中提醒用户修改。

    [提示]

    如何判断函数名、控件名、属性、方法等是否写错,最方便的方法是当该语句写完后,按

    Enter键,系统把被识别的上述名称自动转换成规定的首字母大写形式,否则为错误的名称。

    4.数据合法性检查中引起程序的死循环

    在数据输入时,经常需要对输入的数据作合法性检查,以确保程序运行的正确性。如在实验::第1题中,对输入的温度要求是数字,否则删除原输入的内容,焦点仍定位于文本柜。有关属性设置见下表,界面如图2所示,程序段如下。

    表2 控件有关属性

    有关控件名

    TabIndex

    Text1

    2

    Text2

    3

    Command1

    4

    Command1

    5

    Private Sub Text1_LostFocus()

    If

    Not IsNumeric(Text1)Then

    Text1=""

    Text1.SetFocus

    End If

    EndSub

    Private Sub Text2_LostFocus()

    If

    Not IsNumeric(Text2)Then

    Text2=""

    Text2.SetFocus

    End

    If

    End Sub

    当华氏温度(Text1)输入错时,焦点在Text2处不停地闪动,程序产生死循环。

    原因是当Textl输入结束按Tab键,激发Textl

    LostFocus事件,焦点已到Text2;但当判断Textl文本框输入数据错时,执行Textl.SetFocus,使焦点从Text2拉回到Textl;而又激发Text2_LostFocus事件,此时并没有判断Text2文本框输入数据错,又执行

    Text2.SetFocus,使焦点从Text1拉回到Text2,如此交错造成死循环。

    而当摄氏温度(Text2)输入错时,程序正常运行。因为当Text2输入结束按Tab键,焦点已到Commanl,因此不会产生死循环。

    解决Text1输入错时死循环的问题,只要把Private Sub

    Text2_LostFocus()事件的If表达式If Not

    IsNumeric(Text2)Then改为:IfText2<>""And

    Not isNumeric(Text2)Then即可。

    5.如何终止死循环

    当编写程序时考虑不周到,产生死循环(尤其使用第四章介绍的循环结构)时,只要同时按Ctrl+Break键就町终止死循环,找出死循环的原因,修改程序。

    6.声明局部变量和窗体级变量的问题

    在VB程序中,除了大量的控件对象外,还要使用一些变量,暂时存放一些中间结果。这些变量的声明可以放在过程外的"通用声明"段(称为窗体级变量),也可以放在过程中(称为局部变量),怎样安置这些变量,初学者觉得有点头疼。两者区别:窗体级变量在本窗体的所有过程中均可使用:而局部变量仅在变量所在的过程中可使用,也即随着本过程的执行而分配存储空间,当执行到EndSub语句,分配的内存空间回收,变量的值也丢失。

    具体对实验二第2题来说,在方法一中窗体内有四个过程,共同要用到三个变量a,b,c,因此这些变量的声明应在"通用声明"段,否则Click事件过程中a,b,c变量的值为零。在方法二中只有一个事件过程,变量a,b,c作为过程级变量声明,当然声明与窗体级变量效果相同。

    方法一: 方法二:

    Dim

    ag,b#,c# Private

    Sub Form_Click()

    Private Sub

    Textl_LostFocus() Dima#,b#,c#

    … '对变量a赋值 … '用到变量a,b,c

    EndSub EndSub

    Private Sub Text2_LostFocus()

    … '对变量b赋值

    EndSub

    Private Sub Text3_LostFocus()

    … '对变量c赋值

    EndSub

    Private Sub Command1_Click()

    … '用到变量a,b,c

    EndSub

    7.在Form

    Load事件中,SetFocus方法不起作用

    原因同Print方法,因为系统在窗体装入内存时无法同步地用SetFocus方法定位控件的焦点。解决的方法在属性窗口对要定位焦点的控件将其Tablndex值设置为。就可。

    8.程序运行时对多个文本框间焦点移动的问题

    方法-:按"Tab"键。这时可不必编程,直接利用系统提供的功能方便地在各控件之间移动。若要确定离开或进入了哪个控件,则利用"控件LostFocus''或"控件_GotFocus''事件进行判断。

    方法二:按"回车"键。这时必须通过KeyPress事件编程宋实现,有关程序段如下:

    Private Sub某文本框_KeyPress(KeyAscii As

    Integer)

    If KeyAscii=13 Then

    另一控件.SetFocus

    End If

    End Sub

    三、选择结构/循环结构常见错误

    1.选择结构语法错误

    (1)块IF语句中如果有Else,必须单独作为一行;且End

    If不可缺省;

    (2)多条件选择ElseIf关键字的书写:

    ElseIf 不要写成Else If;

    (3)Select Case语句要与End

    Select配对出现;

    (4)Select Case

    后不能出现多个变量;Case子句后不能出现变量及有关运算符;

    (5)Select

    Case结构中Case后面的表达式之一是:Is

    ,它是简单关系式,例如:

    Private Sub Command1_Click()

    x =

    Val(InputBox("输入学生成绩"))

    Select Case

    x

    Case Is <

    60 ' 不能写成:Case x<60

    Print "不及格"

    Case Else

    Print "及格"

    End

    Select

    End Sub

    以下语句也是错误的:

    Select Case x1,x2,x3

    Case

    (x1+x2+x3)>=270

    Print "优秀"

    ……

    End Select

    2.选择结构逻辑错误

    VB程序的语法错误在编译过程中系统会给出提示信息。但是,如果存在逻辑错误系统就无能为力了,只能给出错误的结果,此时程序员很难找出错误所在。下面的例子是一个多条件表达式,例如,根据输入学生的百分制成绩,显示出五个不同的等级评定,评定条件如下:

    以下程序段是正确的:

    Private Sub Command1_Click()

    Dim mark As Integer, grade As String

    mark = InputBox("请输入学生的成绩:")

    If mark >= 90 Then

    grade =

    "优"

    ElseIf mark >= 80 Then

    grade =

    "良"

    ElseIf mark >= 70 Then

    grade =

    "中"

    ElseIf mark >= 60 Then

    grade =

    "及格"

    Else

    grade =

    "不及格"

    End If

    Print grade

    End Sub

    如果将IF……End

    IF之间的语句改为以下程序段结果就是错误的:

    If mark >= 60 Then

    grade =

    "及格"

    ElseIf mark >= 70 Then

    grade =

    "中"

    ElseIf mark >= 80 Then

    grade =

    "良"

    ElseIf mark >= 90 Then

    grade =

    "优"

    Else

    grade =

    "不及格"

    End If

    以上语句除了输入小于60分的输出正确以外,其他只要输出大于或等于60分的都输出“及格”。这是因为只要遇到第一个满足条件的即不再往下进行判断。

    另外还应该注意的是,Then后面不能写语句,必须换行。

    1.在选择结构中缺少配对的结束语句

    对多行式的If块语句中,应有配对的End

    If语句结束。否则,在运行时系统会显示"块

    If没有End If"的编译错误。

    同样对Select

    Case语句也应有与其相对应的EndSelect语句。

    2.多边选择ElseIf关键字的书写和条件表达式的表示

    多边选择ElseIf子句的关键字ElseIf之间不能写有空格,即不能写成Else

    If。

    在多个条件表达式的表示时,应从最小或最大的条件依次表示,以避免条件的过滤。

    3.Select Case语句的使用

    (1)"表达式列表i"中不能使用"变量或表达式"中出现的变量。例如,上述多边选择的例子改为Select

    Case语句实现,方法一Case子句中出现变量mark,运行时不管mark的值多少,始终执行Case

    Else子句,运行结果不正确;方法二、方法三正确。

    方法一: 方法二: 方法三:

    Select Case mark Select Case

    mark Select Case mark

    Case

    mark>=90 Case

    Is>=90 Case

    Is>=90

    Print"优"

    Print"优" Print"优"

    Case

    mark>=80 Casels>=80 Case 80 To 89

    Print"良" Print"良" Print"良"

    Casemark>=70 Case Is>=70 Case 70To 79

    Print"中" Print"中" Print"中"

    Case

    mark>=60 Case Is>=60 Case 60TO 69

    Print

    "及格" Print "及格 Print"及格"

    Case Else

    Case

    Else

    Case

    Else

    Print"不及格" Print"不及格"

    Print"不及格"

    End

    Select End

    Select End Select

    (2)在"变量或表达式"中不能出现多个变量。实验三第5题对三门课程奖学金的判断,只能用If语句的多边选择,而不能用SelectCase语句实现。例如,有些读者用如下语句表示:

    Select Case markl,mark2,mark3

    Case

    (markl+mark2+mark3)/3>=95

    Print"一等奖"

    End Select

    这样就会在"Select Case

    markl,mark2,mark3"语句行出现编辑错误:同时Case(markl+mark2

    +mark3)/3>=95书写也错误。

    3.不循环或死循环问题

    出现不循环或死循环主要是循环条件、循环初值、循环终值、循环步长的设置有问题。

    例如,以下循环语句不执行循环体:

    For i=1 To 10 Step

    –2 '

    步长为负,初值必须大于等于终值才能循环

    For I=100 To

    10 '

    缺省步长默认为正1,初值必须小于等于初值才能循环

    Do While

    False ' 循环条件是逻辑常量False,不执行循环

    Do While

    0 ' 循环条件为0等同于False

    例如,以下循环形成死循环:

    For I=10 to 100 Step

    0 ' 步长为0初值永远不会超过终值

    Do While

    True '

    循环条件是逻辑常量True,永远满足循环条件

    Do While

    1 ' 循环条件为非零值等同于True

    4.循环结构中缺少配对的结束语句

    For循环缺少Next语句;Do语句缺少Loop,尤其是多重循环这类问题更应该注意。

    5.多重循环语句内外循环交叉

    For i=1 to

    4 For i=1 to 4

    For j=1 to

    5 应改为: For j=1 to

    5 或将Next后面的j和i均去掉;

    ?i+j; ?i+j;

    Next

    I Next

    j 或将以下两行写成一行:Next i, j

    Next

    j Next i     Next后面的i,j不能缺且顺序不能错

    6.计数、累加、连乘结果变量赋初值问题

    计数一般的语句格式是:n=n+1的形式,每循环一次自动加1,而累加的一般格式是:s=s+x,每次将x的值累加到s中去。如果已经定义n、s为数值型变量,则默认初值为0,可以省略赋初值。而连乘的一般格式是:p=p*j,此时p应该赋初值1。例如,求10!的语句为:

    p=1

    for i=1 to 10

    p=p*i

    next I

    如果是多重循环,存放累加、连乘结果的变量初值设置放在内、外循环的位置应视具体问题分别处理。

    例如,以下程序段是求出30位同学三门课的平均成绩:

    Private Sub Command1_Click()

    For i = 1 To 30

    aver =

    0       ' 每换一位同学重新置0

    For j = 1 To

    3

    m = InputBox("输入第" & j &

    "门课的成绩:")

    aver = aver + m

    Next j

    aver = aver

    / 3

    Print "第"

    & i &

    "位同学的平均成绩是:", aver

    Next

    End Sub

    1.不循环或死循环的问题主要是循环条件、循环初值、循环终值、循环步长的设置有问题。例如,以下循环语句不执行循环体:

    For i=10 To 20

    Step-1 '

    步长为负,初值必须大于等于终值,才能循环

    For i=20 To10 '

    步长为正,初值必须小于等于终值,才能循环

    Do While False '

    循环条件永远不满足,不循环

    例如,以下循环语句死循环:

    For i=10 To 20 Step

    0 '

    步长为零,死循环

    Do While

    1 ' 循环条件永远满足,死循环

    2.循环结构中缺少配对的结束语句

    For…Next语句没有配对的Next语句;Do语句没有一个终结的Loop语句等。

    3.循环嵌套时,内外循环交叉:

    For I=1 to

    4

    For j=1 to 5

    Next

    i

    Next j

    上述循环的交叉运行时显示"无效的Next控制变量引用"。

    4.累加、连乘时,存放累加、连乘结果的变量赋初值问题

    (1)一重循环

    在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。

    例如,求1~100的3的倍数和,结果放入Sum变量中,如下程序段,输出结果如何?

    Private SubForm_Click()

    Fori=3 To

    100 Step 3

    Sum=0

    Sum=Sum+i

    Next i

    Print

    Sum

    End Sub

    要得到正确的结果,应作如何改进?

    (2)多重循环

    在多重循环中,存放累加、连乘结果的变量初值设置放在外循环语句前,还是内循环语句前,这要视具体问题分别对待。

    例如,期末30位学生参加三门课程的考试,求每个学生的三门课程的平均成绩如下程序能否实现,应如何改进?

    aver=0

    For i=1 To 30

    For j=1 To

    3

    m=InputBox("输入第"&j&"门课的成绩")

    aver=aver+m

    Next j

    aver=aver/3

    Print aver

    Nexti

    展开全文
  • VB常见错误和难点分析

    千次阅读 2018-09-10 19:41:42
    否则,在运行时系统会显示”块 If没有End If”的编译错误。同样对Select Case语句也应有与其相对应的End Select语句。 2.多边选择ElseIf关键字的书写和条件表达式的表示 多边选择ElseIf子句的关键字ElseIf之间不...

    1.在选择结构中缺少配对的结束语句

    对多行式的If块语句中,应有配对的End If语句结束。否则,在运行时系统会显示”块 If没有End If”的编译错误。同样对Select Case语句也应有与其相对应的End Select语句。

    2.多边选择ElseIf关键字的书写和条件表达式的表示

    多边选择ElseIf子句的关键字ElseIf之间不能写有空格,即不能写成Else If。

    在多个条件表达式的表示时,应从最小或最大的条件依次表示,以避免条件的过滤。例如,已知输入某课程的百分制成绩mark,要求显示对应五级制的讦定,评定条件如下:

    有以下几种表示方式,语法上都没有错,但执行后结果有所不同,请分析哪些正确? 哪些错误?

    下面给出的答案中,方法一、二、五正确,其余错误,请分析各自的原因。
    这里写图片描述

    3.Select Case语句的使用

    (1) “表达式列表i” 中不能使用”变量或表达式”中出现的变量。

    例如,上述多边选择的例子改为Select Case语句实现,方法一Case子句中出现变量mark,运行时不管mark的值多少,始终执行Case Else子句,运行结果不正确;方法二、方法三正确。

    这里写图片描述
    (2) 在”变量或表达式”中不能出现多个变量。

    实验三第5题对三门课程奖学金的判断,只能用If语句的多边选择,而不能用SelectCase语句实现。例如,有人用如下语句表示:

       Select Case markl,mark2,mark3
    
              Case (markl+mark2+mark3)/3>=95
    
                     Print"一等奖"
    
       End Select
    

    这样就会在 “Select Case markl,mark2,mark3” 语句行出现编辑错误, 同时

    Case (markl+mark2 +mark3)/3>=95书写也错误。

    第四章 常见错误和难点分析

    1. 不循环或死循环的问题主要是循环条件、循环初值、循环终值、循环步长的设置有问题。

    例如,以下循环语句不执行循环体:

    For i=10 To 20 Step-1 ’ 步长为负,初值必须大于等于终值,才能循环

    For i=20 To10 ’ 步长为正,初值必须小于等于终值,才能循环

    Do While False ’ 循环条件永远不满足,不循环

    例如,以下循环语句死循环:

    For i=10 To 20 Step 0 ’ 步长为零,死循环

    Do While 1 ’ 循环条件永远满足,死循环

    2.循环结构中缺少配对的结束语句

    For…Next语句没有配对的Next语句;Do语句没有一个终结的Loop语句等。

    3.循环嵌套时,内外循环交叉

       For I=1 to 4
    
              For j=1 to 5
    
              …
    
              Next i
    
       Next j
    

    上述循环的交叉运行时显示”无效的Next控制变量引用”。

    4.累加、连乘时,存放累加、连乘结果的变量赋初值问题

    (1) 一重循环

    在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。

    例如,求1~100的3的倍数和,结果放入Sum变量中,如下程序段,输出结果如何?应作如何改进?

       Private SubForm_Click()
    
              For i=3 To 100 Step 3
    
                     Sum=0
    
                     Sum=Sum+i
    
              Next i
    
              Print Sum
    
       End Sub
    

    (2) 多重循环

    在多重循环中,存放累加、连乘结果的变量初值设置放在外循环语句前,还是内循环语句前,这要视具体问题分别对待。

    例如,期末30位学生参加三门课程的考试,求每个学生的三门课程的平均成绩如下程序能否实现?

       aver=0
    
       For i=1 To 30
    
              For j=1 To 3
    
                     m=InputBox("输入第"&j&"门课的成绩")
    
                     aver=aver+m
    
              Next j
    
              aver=aver/3
    
              Print aver
    
       Next I
    

    第五章 常见错误和难点分析

    1.Dim数组声明

    有时用户为了程序的通用性,声明数组的上界用变量来表示,如下程序段:

     n=InputBox("输入数组的上界")
    
     Dim a(1 To n) As Integer
    

    程序运行时将在Dim语句处显示”要求常数表达式”的出错信息。即Dim语句中声明的数组上,下界必须是常数,不能是变量。

    解决程序通用的问题,一是将数组声明的很大,这样浪费一些存储空间;二是利用动态数组,将上例改变如下:

    Dim a() As Integer
    
     n=InputBox ("输入数组的上界")
    
     ReDim a(1 To n)As Integer
    

    2.数组下标越界

    引用了不存在的数组元素,即下标比数组声明时的下标范围大或小即为越界。例如,要形成有如下30项的斐波那契数列:

    1,1,2,3,5,8,13,21,34,…,317811,514229,832040

    正确的程序段如下:

    Dim a(1 To 30) As Long, i%

    若将For i=3 To 30改为For i=1 To 30,程序运行时会显示”下标越界”的出错信息,因为开始循环时i=l,执行到循环体语句a(i)=a(i-2)+a(i-1),数组下标i-2、i-1均小于下界1。

    同样若将上例:a(i)+a(i-2)+a(i-1) 语句改为:a(i+2)=a(i)+a(i+1)

    程序运行时也会显示”下标越界”的出错信息,这时是数组下标大于上界30。

    3.数组维数错

    数组声明时的维数与引用数组元素时的维数不一致。例如,下程序段为形成和显示3×5的矩阵:

      Dim a(3,5) As Long
    
              For i=1 To 3
    
                     For j=1 To 5
    
                            a(i)=i*j
    
                            Print a(i);"";
    
                     Next j
    
              Print
    
       Next i
    

    程序运行到a(i)=i*j语句时出现”维数错误”的信息,因为在Dim声明时是二维数组,引用时的一个下标。

    4.Aarry函数使用问题

    Aarry函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。赋值后的数组大小由赋值的个数决定。

    例如,要将1,2,3,4,5,6,7这些值赋值给数组a,下表列出了三种错误及相应正确的赋值方法。

    Aarry函数表示方法
    这里写图片描述
    Dim aa=Array(1,2,3,4,5,6,7)

    5.如何获得数组的上界、下界

    Aarry函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的范围内,可使用UBound和LBound函数来决定数组访问。

    在上例中,若要打印a数组的各个值,可通过下面程序段实现:

    For i=Lbound(A) To Ubound(A)

          Print a(i)
    

    Next l

    6.给数组赋值

    VB6.0提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作。但真正使用不那么方便,有不少限制。数组赋值形式如下:数组名2=数组名1

    这里的数组名2,实际上在前面的数组声明时,只能声明为Varian的变量,赋值后的数组2的大小、维数、类型同数组名1;否则,若声明成动态或静态的数组,例如:

    Dim数组名2() 或Dim数组名2 (下标)

    程序在运行到上述赋值语句时显示”不能给数组赋值”的出错信息。

    第五章 数 组

    5.1 知识要点

    1.数组的概念

    数组:存放具有相同性质的一组数据,也就是数组中的数据必须是同一个类型和性质。

    数组元素:数组中的某一个数据项。数组元素的使用同简单变量的使用。

    2.静态数组的声明

    静态数组:在声明时已确定了数组元素个数。

    声明形式:Dim数组名([下界To]上界[,[下界To]上界[,…]])As 类型

    此语句声明了数组名、数组维数、数组大小、数组类型。

    [注意] 下界、上界必须为常数,不能为表达式或变量:省略下界,默认为0,也可用Option Base语句重新设置下界的值。

    3.动态数组的声明

    声明形式: Dim数组名 ()

            ReDim  [Preserve]数组名([下界To]上界[,[下界To]上界[,…]])
    

    [注意]

    此时的上界、下界可以是赋了值的变量或表达式。若有Preserve关键字,表示当改变原有数组最末尾的大小时,使用此关键字可以保持数组中原来的数据。

    4.控件数组

    即相同类型的控件组成的数组。

    控件数组的建立:在设计时的窗体上,通过对某控件的复制和粘贴操作:在程序运行时通过Load方法实现。

    控件数组元素:由控件的Index属性值表示数组的F标。

    5.数组的操作

    应掌握的基本操作有:数组初始化、数组输入、数组输出、求数组中的最大(最小)元素及下标、求和、平均值、排序和查找等。

    5.2 常见错误和难点分析

    1.Dim数组声明

    有时用户为了程序的通用性,声明数组的上界用变量来表示,如下程序段:

     n=InputBox("输入数组的上界")
    
     Dim a(1 To n) As Integer
    

    程序运行时将在Dim语句处显示”要求常数表达式”的出错信息。即Dim语句中声明的数组上,下界必须是常数,不能是变量。

    解决程序通用的问题,一是将数组声明的很大,这样浪费一些存储空间;二是利用动态数组,将上例改变如下:

    Dim a() As Integer
    
     n=InputBox ("输入数组的上界")
    
     ReDim a(1 To n)As Integer
    

    2.数组下标越界

    引用了不存在的数组元素,即下标比数组声明时的下标范围大或小即为越界。例如,要形成有如下30项的斐波那契数列:

    1,1,2,3,5,8,13,21,34,…,317811,514229,832040

    正确的程序段如下:

    Dim a(1 To 30) As Long, i%

    若将For i=3 To 30改为For i=1 To 30,程序运行时会显示”下标越界”的出错信息,因为开始循环时i=l,执行到循环体语句a(i)=a(i-2)+a(i-1),数组下标i-2、i-1均小于下界1。

    同样若将上例:a(i)+a(i-2)+a(i-1) 语句改为:a(i+2)=a(i)+a(i+1)

    程序运行时也会显示”下标越界”的出错信息,这时是数组下标大于上界30。

    3.数组维数错

    数组声明时的维数与引用数组元素时的维数不一致。例如,下程序段为形成和显示3×5的矩阵:

      Dim a(3,5) As Long
    
              For i=1 To 3
    
                     For j=1 To 5
    
                            a(i)=i*j
    
                            Print a(i);"";
    
                     Next j
    
              Print
    
       Next i
    

    程序运行到a(i)=i*j语句时出现”维数错误”的信息,因为在Dim声明时是二维数组,引用时的一个下标。

    4.Aarry函数使用问题

    Aarry函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。赋值后的数组大小由赋值的个数决定。

    例如,要将1,2,3,4,5,6,7这些值赋值给数组a,下表列出了三种错误及相应正确的赋值方法。

    Aarry函数表示方法

    这里写图片描述

    5.如何获得数组的上界、下界

    Aarry函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的范围内,可使用UBound和LBound函数来决定数组访问。

    在上例中,若要打印a数组的各个值,可通过下面程序段实现:

    For i=Lbound(A) To Ubound(A)

          Print a(i)
    

    Next l

    6.给数组赋值

    VB6.0提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作。但真正使用不那么方便,有不少限制。数组赋值形式如下:数组名2=数组名1

    这里的数组名2,实际上在前面的数组声明时,只能声明为Varian的变量,赋值后的数组2的大小、维数、类型同数组名1;否则,若声明成动态或静态的数组,例如:

    Dim数组名2() 或Dim数组名2 (下标)

    程序在运行到上述赋值语句时显示”不能给数组赋值”的出错信息。

    申明
    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
    博文欢迎转载,但请给出原文连接。
    转自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm

    展开全文
  • VB】编译错误

    千次阅读 2018-05-01 09:38:55
    以下三种解决方法: 1)工程——引用——选中"Microsoft ActiveX Data Objects 2.6 Library"——点击“确定” 拓展:ActiveX DataObjects,简称ADO,访问数据库的一个接口,就是用来跟数据库交互的。 2)检查定义...
  • 教学提示:本章主要介绍VB的程序调试技术,其中包括VB编程过程中常见的错误类型的产生和表现,以及利用VB提供的调试工具和语句对程序错误进行捕获、处理和修改的方法。VB为广大用户提供了功能强大的程序调试工具,使...
  • VB 运行时错误代码解释

    千次阅读 2014-05-12 22:19:40
    VB 运行时错误代码解释 3 ---- 无 GoSub 返回 5 ---- 无效的过程调用或参数  6 ---- 溢出  7 ---- 内存溢出 9 ---- 下标越界  10 ---- 该数组被固定或暂时锁定   11 ---- 除数为零 13 ---- ...
  • VB.Net – 数据类型

    2021-07-22 06:22:46
    变量的类型决定了它在存储中占用的空间大小以及如何解释存储的位模式.VB.Net中可用的数据类型VB.Net提供了广泛的数据类型.下表显示了所有可用的数据类型和减号;数据类型存储分配值范围Boolean取决于实施平台真或错误...
  • 每个值都有与之关联的类型,此类型定义分配给该值的空间大小,许多值可以表示为多种类型。例如,值 4 可以表示为整数或浮点值。...而显示转换要求编译前指定由哪种类型转换成哪种类型,在代码书写中很容易识...
  • win7系统从网上下载了一个VB开发的小工具,运行的时候提示“运行时错误429ActiveX部件不能创建对象”,VB工具一直都没办法运行,这是怎么回事呢,这是因为缺少了微软的组件库,或者组件注册信息丢失导致的,为帮助...
  • VB调用MATLAB时,显示错误:用户定义类型未定义 程序如下:Option ExplicitPrivate geneIndex(1 To 8, 1 To 3) As DoublePrivate genePlatform(1 To 2) As DoublePrivate MyGenetic As Genetic.GeneticPrivate Sub ...
  • VB跳过错误(error)----编码小技巧

    千次阅读 热门讨论 2018-08-28 17:11:22
    敲机房时,在用到导出execl表格,当点击否按钮时,就出现了错误,显示实时错误‘1004’:对象‘saveas’的方法‘_workbook’失败。   我遇到这个错误之后,我想我点击的是“否”按钮,正确操作的话是直接退出就...
  • VB.NET之错误异常处理

    千次阅读 热门讨论 2014-05-19 15:06:02
    Goto类型的异常处理,但是这样做并不是很好。相比而言,结构化异常处理更加灵活,使用更加方便。我们应该充分利用VB.NET提供的结构化异常处理。  在VB.NET结构中的异常处理分为3个语句块。  (1)try块负责错误...
  • VB读写注册表的三种方法

    千次阅读 2013-08-09 19:53:47
    我这里列举三种:   一.用VB自带的函数读写   VB中有三个函数,用于操作注册表,分别是“GetSetting”、“SaveSetting”、“DeleteSetting”。我想从字面上应该也可以猜出它们的大致功能。   教科书似的...
  • VB函数参数传递方法,Variant,数组,Optional,ParamArray一) 过程的参数被缺省为具有 Variant 数据类型。1)ByRef按 地址传递参数在 VB 中是缺省的按地址传递参数后,过程返回的也是地址,函数中改变了的变量值...
  • VB6.0引用Excel时出现加载DLL错误

    千次阅读 2019-05-22 10:41:29
    今天在VB引用Excel时,由于换了一个虚拟机,出现了在引用的时候出现加载DLL错误。 事实上这里的可用引用有时候是错的,可能是之前装过的office残留,或者其他什么的,我暂时没有搞清楚原因,解决方法就是找到你...
  • VB程序错误处理方法

    千次阅读 2014-05-03 13:11:37
    现实上可能泛起的顺序错误是许多的,但是它们基本上可以分为两种类型:一是编译错误;另一是运行期错误。编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。假如一个历程中包含了...
  • 文章目录一、集合的定义与说明二、集合的定义与实例化、集合的属性与方法1) `Add`2)`Count`3)`Item`4)`Remove`四、集合的演示代码五、集合的两遍历方法1)Index遍历法2)Key遍历法 一、集合的定义与说明 ...
  • 一键解决VB6(WIN7 X64)对象库未注册问题,特别是在win7 x64下无法引用mscomctl.ocx的问题,其他控件也可以解决.一定要先解压出来,重点一定要先解压出来!
  • VB与文件或磁盘操作有关的错误处理示例,当程序遇到错误时应该如何处理,通过这个VB小例子你将学会到一些错误处理的方法,定义MsgBox()中按钮类型、保存用户对MsgBox()的选择、使用MsgBox()弹出提示、使用MsgBox()中...
  • 1、System.Object  System.Object是VB.net所有类的父类(基类)。  把对象转换成其父类的类型时,只能使用父类提供的方法。  ToString方法可获得任意... VB.net主要有两个变量类型:值类型、引用类型  值类型
  • VB.NET数据类型

    千次阅读 2018-05-03 13:46:05
    https://www.cnblogs.com/sdfczyx/p/7132769.htmlVB.Net关键字下表列出了VB.Net保留的关键字:...
  • 前言:下面是针对初学VB同学的刷题总结。 1. 数据类型 1.1 数值类型 数值类型数据可以直接参与运算,代表的数据类型有:Integer(整型)、Long(长整型)、Single(单精度)、Double(双精度)等,囊括了整数、小数、日期...
  • 当前位置:我的异常网» C语言»VB与C的数据类型有哪些区别啊该怎么处理VB与C的数据类型有哪些区别啊该怎么处理www.myexceptions.net网友分享于:2013-02-21浏览:51次VB与C的数据类型有哪些区别啊如题~------解决...
  • vb 常见错误及处理方法

    千次阅读 2010-09-27 10:20:00
    1。“找不到工程或库” :去掉对应的引用2。“ACTIVEX部件不能创建对象” :有DLL未注册
  • VB使用的基本数据类型

    万次阅读 2012-10-18 10:05:09
    VB的数据类型比较丰富,可以分为两大类:基本数据类型和用户自定义类型。 一、基本数据类型 表3-1列出了VB使用的基本数据类型。 表3-1 VB 基本数据类型 数据类型 关键字 类型符 前缀 ...
  • 昨儿,在运行程序时,弹出如图所示的提示框显示: ...其实我们是忽略了integer类型的取值范围,在这个代码中,我们可以口算出a最后的值为150000,但是integer表示16位的整数,且它的数据的范围是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,827
精华内容 16,730
关键字:

vb的三种错误类型