扫雷英雄榜——VisualBasic 6.0常见错误及解决方案

上传人:豆浆 文档编号:4514815 上传时间:2017-08-20 格式:PDF 页数:23 大小:292.35KB
返回 下载 相关 举报
扫雷英雄榜——VisualBasic 6.0常见错误及解决方案_第1页
第1页 / 共23页
扫雷英雄榜——VisualBasic 6.0常见错误及解决方案_第2页
第2页 / 共23页
扫雷英雄榜——VisualBasic 6.0常见错误及解决方案_第3页
第3页 / 共23页
扫雷英雄榜——VisualBasic 6.0常见错误及解决方案_第4页
第4页 / 共23页
扫雷英雄榜——VisualBasic 6.0常见错误及解决方案_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《扫雷英雄榜——VisualBasic 6.0常见错误及解决方案》由会员分享,可在线阅读,更多相关《扫雷英雄榜——VisualBasic 6.0常见错误及解决方案(23页珍藏版)》请在金锄头文库上搜索。

1、 ii7JTVBM#BTJDnp#%Z 王牌8 1 ii7JTVBM#BTJDnp#%Z以下“解决方案”中的内容对应的是“错误分析”中内容的解决方法。 1. 无效的过程调用或参数(错误 5) 错误原因 有些调用操作不能完成。 错误分析 参数值可能超出了允许的范围。例如,Sin 函数只接受特定范围的值。正的参数小于 2,147,483,648 的是可接受的,而等于 2,147,483,648 则会产生错误。 如果所要调用的过程不适于当前平台的话,也会发生此错误。例如,有些程序可能只应用到 Microsoft Windows 或 Macintosh 等。 解决方案 检查参数的许可范围。 检查过程的

2、特定平台信息。 2. 溢出(错误 6) 错误原因 当赋值超出目标的限制时,就会发生溢出。 错误分析 赋值、计算或 数据类型 的结果的转换太大,以致于不能在 变量 类型所允许的范围内表示出来。 给 属性 的赋值超过属性能接受的最大值。 试图在计算中使用一个数字,并且该数字被强制为一个整数,但是结果超过了整数的范围,例如: Dim x As Long x = 2000 * 365 错误: 溢出 7JTVBM#BTJDVY2 解决方案 赋值给足够表示值的范围的类型的变量上。 确保赋值适合属性的范围。 要解决这个问题,请按如下方式键入该数字: Dim x As Long x = CLng(2000)

3、* 365 3. 内存溢出(错误 7) 错误原因 需要更多的内存空间,或是遇到 64K 段边界限制。 错误分析 打开了太多的、文档或资源文件。 模块 或 过程 太大了。 在 Microsoft Windows 标准模式下执行。 在 Microsoft Windows 增强方式下执行,但超出了虚拟内存的空间。 一些驻留程序在运行。 设备驱动程序装载的太多。 Public 变量 超出了空间。 解决方案 关闭不需要的应用程序、文档或资源文件。 将庞大的模块或过程分成几个。虽然这样不能节省内存空间,但可避免 64K 段边界限制。 按增强方式重新启动 Microsoft Windows 。 空出一些磁盘

4、空间以增加虚拟内存,或至少确保有空馀的空间。 减少一些驻留程序。 减少一些不需要的设备驱动程序。 减少 Public 变量的数量。 4. 下标越界(错误 9) 错误原因 只能在定义的范围内访问 数组 元素和 集合 成员。 ii7JTVBM#BTJDnp#%Z 王牌8 3 错误分析 引用了不存在的数组元素。 声明数组时没有指定元素的数目。例如,下列的代码就会导致此错误: Dim MyArray() As Integer MyArray(8) = 234 导致错误 9 。 引用了不存在的集合成员。 使用速写形式的下标,结果指定了错误的元素。 解决方案 下标比可能下标范围大或小,或是在应用程序中这一

5、边的数组没有指定范围。检查数组的 声明 以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为 变量 ,应检查变量名的拼写。 Visual Basic 并不会将没有指定范围的数组自动设为 0 10。相反必须使用 Dim 或 ReDim 来指定数组中元素的数目。 试着使用 For Each.Next 结构代替指定元素下标。 例如,当在集合上使用 ! 运算子时, ! 自动指定了一个键。例如 object!keyname.value 和 object.item(keyname).value 是一样的。在此例中,集合中如果 keyn

6、ame 表示一个错误键,错误就会产生。若要改进此错误,在集合对象中使用正确的键名称或索引。 5. 数组长度固定或临时被锁定(错误 10) 错误原因 并非所有 数组 都可重设大小。即使数组声明成动态,或者数组是在 Variant 变量 中,也会被临时锁定。 错误分析 使用 ReDim 来改变固定大小数组的元素数。例如,在下列的代码中,在 NextOne 过程中 SomeArr 接收了固定大小的数组 FixedArr ,然后试图调整 SomeArr 的大小: Sub FirstOne Dim FixedArr(25) As Integer 创建一个固定大小的数组并 NextOne FixedArr

7、() 将之传给其它过程。 End Sub Sub NextOne(SomeArr() As Integer) ReDim SomeArr(35) 发生错误 10。 7JTVBM#BTJDVY4 . . . End Sub 对模块层次动态数组,要重新确定大小,而某一个元素已经作为 参数 传给了过程。例如,在下列的代码中, ModArray 是模块层次动态数组,却将其第 56 个元素以 按引用 传给 Test 过程: Dim ModArray () As Integer 创建一个模块层次动态数组。 . . . Sub AliasError() ReDim ModArray (1 To 73) As

8、 Integer Test ModArray (45) 传模块层次动态数组的元素 给 Test 过程。 End Sub Sub Test(SomeInt As Integer) ReDim ModArray (1 To 40) As Integer 错误在这里发生。 End Sub 赋一个值给包含数组的 Variant 变量,但 Variant 当前被锁定。例如,如果代码使用了 For Each.Next 循环,对包含数组的 variant 执行操作的话,在进入循环后数组将会被锁定,在循环退出后释放: SomeArray = Array(9,8,7,6,5,4,3,2,1) For Each

9、X In SomeArray SomeArray = 301 因为数组锁定导致错误。 Next X 解决方案 将数组用 ReDim(如果是在过程内声明数组)声明为动态的而非固定大小,或在声明时不指定元素数(如果是在 模块级别 中声明数组 ) 。 此例并不需要传递模块层次动态数组元素,因为在模块中所有过程都可看到它。然而,如果传递元素,在过程内引用 参数 ,数组会被锁定以避免内存的配置释放,因此,当过程返回时,会导致不能预测的情况出现。 使用 For.Next 代替 For Each.Next 循环来执行迭代。当数组是 For Each.Next 循环的对象时,可以读入数组,但不能写入。 ii7

10、JTVBM#BTJDnp#%Z 王牌8 5 6. 除数为零(错误 11) 错误原因 除数为零是不允许的。 错误分析 表达式 的值作除数使用,但其为零。 解决方案 检查在表达式中 变量 的拼写。拼写错误的变量名会被当成数值变量并且初始值为零。检查表达式中变量的前一个操作,尤其是从其他 过程 传送给过程的 参数 。 7. 串空间溢出(错误 14) 错误原因 Visual Basic 允许使用非常大的字符串。然而,其他程序的需求和处理字符串的方法可能导致这种错误。 错误分析 使用的 表达式 为计算所创建的临时字符串,可能产生此错误。例如,下列的代码在一些操作系统上将产生 Out of string

11、space 的错误: MyString = Hello For Count = 1 To 100 MyString = MyString & MyString Next Count 系统内存溢出,致使不能给字符串分配空间。 解决方案 将字符串赋值给其他名称的 变量 。 删除不需要的应用程序以增加可用的内存空间。 8. 不能执行所需的操作(错误 17) 错误原因 如果此操作会导致 工程 的当前状态无效,则操作将不能执行。 7JTVBM#BTJDVY6 错误分析 所要求的操作不能作用在工程当前的状态。例如,当程序正处于 中断模式 时,使用“ 引用” 对话框来添加一个对工程或 对象库 的新引用时,就

12、会发生此错误。 试图修改正在执行的代码。例如,试图从文件读出代码然后加到正在执行的 模块 中。 解决方案 停止执行当前的代码,然后重试此操作。 虽然可以修改工程中当前并非真正执行的模块,但不能修改正在运行的模块。如要要做这样的修改,必须停止当前正在运行的模块,再添加或修改,然后重新执行。 9. 出现用户中断(错误18) 错误原因 进程的中断执行是很有用的,如果不进行处理则会使应用程序中止。 错误分析 用户按 CTRL+BREAK 或其他中断键。 解决方案 在 开发环境 中可继续执行。避免在 运行时 出现这种情况,应使用合适的方法处理此错误。 10. 未发生错误而出现Resume(错误 20)

13、错误原因 Resume 语句只能在错误处理程序内出现,而且只能在活动的错误处理程序中执行。 错误分析 将 Resume 语句放在错误处理程序的代码之外。 代码即使没有错误也跳到了错误处理程序之中。 解决方案 将此语句移到错误处理程序之内,或删除它。 也许拼错了 行标签 。不能经过 过程 跳到标签,所以搜寻过程中注明错误处理程序的标签。如果找到了重复的 GoTo 语句的目标标签,而不是属于 On Error GoTo 语句的目标标签的话,修改行标签使与所要的目标标签一致。 ii7JTVBM#BTJDnp#%Z 王牌8 7 11. 堆栈空间溢出(错误 28) 错误原因 堆栈是内存的一个工作区,会随

14、着程序运行的需要而增长或缩小 错误分析 有太多活动的 Function 、Sub 或 Property 过程调用。 本地 变量 需要更多可用的本地变量空间。 有太多定长字符串。 DoEvents 函数调用的嵌套太多。 代码引起了事件层叠。 解决方案 检查 过程 的嵌套是否太深,尤其是递归过程,即自己调用自己的过程。确保递归能终止,使用 “ 调用” 对话框来查看活动的过程 ( 在堆栈上) 。 试着在 模块级别 中声明某些变量。可以在静态过程,即在 Property 、 Sub 或 Function 关键字前加上 Static ,声明所有变量,或可以在过程内使用 Static 语句来声明各个 Static 变量。 定长字符串在过程中可快速访问,比可变长度字符串使用更多堆栈空间,因为字符串数据本身要放在堆栈上。可试着重新定义一些

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号