VisualBasic60常见错误及解决方案Word文档格式.docx

上传人:b****3 文档编号:17064415 上传时间:2022-11-28 格式:DOCX 页数:24 大小:26.01KB
下载 相关 举报
VisualBasic60常见错误及解决方案Word文档格式.docx_第1页
第1页 / 共24页
VisualBasic60常见错误及解决方案Word文档格式.docx_第2页
第2页 / 共24页
VisualBasic60常见错误及解决方案Word文档格式.docx_第3页
第3页 / 共24页
VisualBasic60常见错误及解决方案Word文档格式.docx_第4页
第4页 / 共24页
VisualBasic60常见错误及解决方案Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

VisualBasic60常见错误及解决方案Word文档格式.docx

《VisualBasic60常见错误及解决方案Word文档格式.docx》由会员分享,可在线阅读,更多相关《VisualBasic60常见错误及解决方案Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

VisualBasic60常见错误及解决方案Word文档格式.docx

需要更多的内存空间,或是遇到64K段边界限制。

⑴打开了太多的、文档或资源文件。

⑵模块或过程太大了。

⑶在MicrosoftWindows标准模式下执行。

⑷在MicrosoftWindows增强方式下执行,但超出了虚拟内存的空间。

⑸一些驻留程序在运行。

⑹设备驱动程序装载的太多。

*

⑺Public变量超出了空间。

⑴关闭不需要的应用程序、文档或资源文件。

⑵将庞大的模块或过程分成几个。

虽然这样不能节省内存空间,但可避免64K段边界限制。

⑶按增强方式重新启动MicrosoftWindows。

⑷空出一些磁盘空间以增加虚拟内存,或至少确保有空馀的空间。

⑸减少一些驻留程序。

⑹减少一些不需要的设备驱动程序。

⑺减少Public变量的数量。

4.下标越界(错误9)

只能在定义的范围内访问数组元素和集合成员。

VisualBasic常见错误及解决方案王牌8

3

⑴引用了不存在的数组元素。

[

⑵声明数组时没有指定元素的数目。

例如,下列的代码就会导致此错误:

DimMyArray()AsInteger

MyArray(8)=234'

导致错误9。

⑶引用了不存在的集合成员。

⑷使用速写形式的下标,结果指定了错误的元素。

⑴下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。

检查数组的声明以确认其上界和下界。

若使用的是重新指定范围的数组,应使用UBound和LBound函数来决定数组访问。

如果索引指定为变量,应检查变量名的拼写。

⑵VisualBasic并不会将没有指定范围的数组自动设为0–10。

相反必须使用Dim或ReDim来指定数组中元素的数目。

^

⑶试着使用ForEach...Next结构代替指定元素下标。

⑷例如,当在集合上使用!

运算子时,!

自动指定了一个键。

例如object!

和(keyname).value是一样的。

在此例中,集合中如果keyname表示一个错误键,错误就会产生。

若要改进此错误,在集合对象中使用正确的键名称或索引。

5.数组长度固定或临时被锁定(错误10)

并非所有数组都可重设大小。

即使数组声明成动态,或者数组是在Variant变量中,也会被临时锁定。

⑴使用ReDim来改变固定大小数组的元素数。

例如,在下列的代码中,在NextOne过程中SomeArr接收了固定大小的数组FixedArr,然后试图调整SomeArr的大小:

SubFirstOne

-

DimFixedArr(25)AsInteger'

创建一个固定大小的数组并

NextOneFixedArr()'

将之传给其它过程。

EndSub

SubNextOne(SomeArr()AsInteger)

ReDimSomeArr(35)'

发生错误10。

4

...

>

⑵对模块层次动态数组,要重新确定大小,而某一个元素已经作为参数传给了过程。

例如,在下列的代码中,ModArray是模块层次动态数组,却将其第56个元素以按引用传给Test过程:

DimModArray()AsInteger'

创建一个模块层次动态数组。

SubAliasError()

ReDimModArray(1To73)AsInteger

TestModArray(45)'

传模块层次动态数组的元素

'

给Test过程。

/

SubTest(SomeIntAsInteger)

ReDimModArray(1To40)AsInteger'

错误在这里发生。

⑶赋一个值给包含数组的Variant变量,但Variant当前被锁定。

例如,如果代码使用了ForEach...Next循环,对包含数组的variant执行操作的话,在进入循环后数组将会被锁定,在循环退出后释放:

SomeArray=Array(9,8,7,6,5,4,3,2,1)

ForEachXInSomeArray

SomeArray=301'

因为数组锁定导致错误。

NextX

⑴将数组用ReDim(如果是在过程内声明数组)声明为动态的而非固定大小,或在声明时不指定元素数(如果是在模块级别中声明数组)。

⑵此例并不需要传递模块层次动态数组元素,因为在模块中所有过程都可看到它。

然而,如果传递元素,在过程内引用参数,数组会被锁定以避免内存的配置释放,因此,当过程返回时,会导致不能预测的情况出现。

⑶使用For...Next代替ForEach...Next循环来执行迭代。

当数组是ForEach...Next循环的对象时,可以读入数组,但不能写入。

5

6.除数为零(错误11)

除数为零是不允许的。

表达式的值作除数使用,但其为零。

检查在表达式中变量的拼写。

拼写错误的变量名会被当成数值变量并且初始值为零。

检查表达式中变量的前一个操作,尤其是从其他过程传送给过程的参数。

7.串空间溢出(错误14)

$

VisualBasic允许使用非常大的字符串。

然而,其他程序的需求和处理字符串的方法可能导致这种错误。

⑴使用的表达式为计算所创建的临时字符串,可能产生此错误。

例如,下列的代码在一些操作系统上将产生Outofstringspace的错误:

MyString="

Hello"

ForCount=1To100

MyString=MyString&

MyString

NextCount

⑵系统内存溢出,致使不能给字符串分配空间。

{

⑴将字符串赋值给其他名称的变量。

⑵删除不需要的应用程序以增加可用的内存空间。

8.不能执行所需的操作(错误17)

如果此操作会导致工程的当前状态无效,则操作将不能执行。

6

⑴所要求的操作不能作用在工程当前的状态。

例如,当程序正处于中断模式时,使用“引用”对话框来添加一个对工程或对象库的新引用时,就会发生此错误。

⑵试图修改正在执行的代码。

例如,试图从文件读出代码然后加到正在执行的模块中。

⑴停止执行当前的代码,然后重试此操作。

⑵虽然可以修改工程中当前并非真正执行的模块,但不能修改正在运行的模块。

如要要做这样的修改,必须停止当前正在运行的模块,再添加或修改,然后重新执行。

9.出现用户中断(错误18)

进程的中断执行是很有用的,如果不进行处理则会使应用程序中止。

用户按CTRL+BREAK或其他中断键。

在开发环境中可继续执行。

避免在运行时出现这种情况,应使用合适的方法处理此错误。

10.未发生错误而出现Resume(错误20)

Resume语句只能在错误处理程序内出现,而且只能在活动的错误处理程序中执行。

⑴将Resume语句放在错误处理程序的代码之外。

⑵代码即使没有错误也跳到了错误处理程序之中。

⑴将此语句移到错误处理程序之内,或删除它。

⑵也许拼错了行标签。

不能经过过程跳到标签,所以搜寻过程中注明错误处理程序的标签。

如果找到了重复的GoTo语句的目标标签,而不是属于OnErrorGoTo语句的目标标签的话,修改行标签使与所要的目标标签一致。

7

%

11.堆栈空间溢出(错误28)

堆栈是内存的一个工作区,会随着程序运行的需要而增长或缩小

⑴有太多活动的Function、Sub或Property过程调用。

⑵本地变量需要更多可用的本地变量空间。

⑶有太多定长字符串。

⑷DoEvents函数调用的嵌套太多。

⑸代码引起了事件层叠。

⑴检查过程的嵌套是否太深,尤其是递归过程,即自己调用自己的过程。

确保递归能终止,使用“调用”对话框来查看活动的过程(在堆栈上)。

⑵试着在模块级别中声明某些变量。

可以在静态过程,即在Property、Sub或Function关键字前加上Static,声明所有变量,或可以在过程内使用Static语句来声明各个Static变量。

⑶定长字符串在过程中可快速访问,比可变长度字符串使用更多堆栈空间,因为字符串数据本身要放在堆栈上。

可试着重新定义一些定长字符串成为变长字符串。

当声明一变长字符串时,只有字符串描述符(非数据本身)会放在堆栈上。

可以在没有堆栈空间的模块层次上定义字符串。

在模块层次申明变量是缺省为Public,所以在模块上所有过程皆可见到字符串。

⑷利用“调用”对话框,在堆栈上查看正在活动的过程。

⑸所谓事件层叠就是引起一个事件,此事件会调用已在堆栈上的事件过程。

事件层叠和不能中止的递归过程调用是相似的,但不太明显,因为是由VisualBasic所调用,而不是在代码中调用。

使用“调用”对话框来查看那些正在活动的过程(在堆栈上)。

12.DLL应用程序客户太多(错误47)

VisualBasic中动态链接库(DLL)一次只能容纳50个主机应用程序访问。

应用程序和其他VisualBasic主应用程序(一些可能是应用程序访问的)都同时访问VisualBasicDLL。

8

减少访问VisualBasic的打开的应用程序数。

13.加载DLL时的错误(错误48)

动态链接库(DLL)就是在Declare语句的Lib子句中所指定的库。

⑴此文件并非可执行的DLL。

⑵此文件并非MicrosoftWindowsDLL。

⑶此文件是早期的MicrosoftWindowsDLL,而且和MicrosoftWindows保护方式不兼容。

⑷此DLL引用到其他不存在的DLL。

⑸此DLL或所引用的DLL并不在所指定的目录中。

⑴如果此文件是正文源文件,它必须编译并链接成可执行的DLL形式。

⑵取得此文件相应的MicrosoftWindowsDLL版。

⑶取得更新的版本。

⑷取得此被引用的DLL并让它能提供其他DLL使用。

⑸移动DLL到所引用的目录或将DLL所在的目录添加到路径中。

14.内部错误(错误51)

确保此错误不是由Error语句或Raise方法所产生。

在VisualBasic中发生了内部出错。

除非此调用不是由Error语句或Raise方法所产生,不然请与Microsoft产品支持服务联系,告知所发生的情况。

9

15.错误的文件名或号(错误52)

此错误发生在访问某指定文件时。

⑴语句引用到如下的文件号或文件名:

①Open语句中没有指定或虽有指定但已经关闭。

②超出文件号范围(1–511)。

⑵无效的文件名或文件号。

\

⑴解决方案:

①用Open语句中指定此文件名。

注意,如果调用Close语句时没有参数,就会不小心关闭当前所有打开的文件,使所有的文件号无效。

②如果代码中会产生文件号的话,请确保产生的文件号应正确。

⑵文件名必须遵循操作系统约定。

在MicrosoftWindows中,可使用以下的约定:

①文件或目录名称可以有两部分:

文件名和任选性的扩展名。

两部分以圆点隔开,例如,。

②文件名可达255字符。

③文件名必须以字母或数字开头。

它可以包含大小写字符(文件名不分大小写),但以下的字符除外:

双引号("

)、撇号('

)、斜杠(/)、反斜杠(\)、冒号(:

)、垂直条(|)。

④文件名可以包含空格。

⑤以下的名称将保留,且不能用在文件或目录上:

CON、AUX、COM1、COM2、COM3、COM4、LPT1、LPT2、LPT3、PRN、NUL。

例如,如果要在Open语句中将文件名设为PRN的话,那么Print#和Write#语句中的缺省打印机,将会指向Open语句中的文件号。

⑥以下是正确的MicrosoftWindows文件名;

My

.901

Second

10

16.找不到指定的文件(错误53)

所指定的文件找不到。

⑴如Kill、Open或Name等语句,引用到一个不存在的文件。

⑵试图调用动态链接库(DLL)中的过程,但找不到在Declare语句的Lib子句中所指定的库文件名。

.

⑶在开发环境中,如果试图打开并不存在的工程或装载不存在的文本文件,将发生错误。

⑴检查文件名的拼写以及指定的路径。

⑵检查文件名的拼写以及指定的路径。

⑶检查文件名或工程名的拼写以及指定的路径。

17.文件模式错误(错误54)

处理文件内容中的语句,必须与打开文件时的模式一致。

⑴将Put或Get语句指定给了顺序文件。

⑵将Print#语句使用在非Output或Append访问方式所打开的文件上。

⑶将Input#语句使用在非Input访问模式所打开的文件上。

⑷试图对一个只读文件进行写。

⑴Put和Get只能在以Random或Binary访问方式打开的文件上使用。

⑵用另外的语句把数据放到文件中或以合适的模式重新打开文件。

|

⑶用另外的语句把数据放到文件中或以Input模式重新打开文件。

⑷修改文件的读/写状态或放弃写入。

11

18.文件已打开(错误55)

有时候文件必须在其他Open或其他操作发生前先关闭。

⑴对一个已经打开的文件,执行顺序输出模式的Open语句。

⑵如Kill、SetAttr或Name等语句,引用到一个打开的文件。

⑴必须将要打开成其他方式的顺序访问方式文件先关闭。

例如,必须先将打开成Input的文件先关闭再打开成Output。

⑵在执行此语句前先关闭此文件。

19.记录长度错误(错误59)

Get或Put语句的记录变量的长度必须和Open语句所指定的相同。

⑴记录变量长度和其Open语句所指定的不同。

⑵Put语句中的变量是(或包括)一个变量长度字符串。

⑶Put语句中的变量为(或包括)Variant。

⑴请确保在定义了记录变量类型的用户定义类型中,固定长度变量应与Open语句的Len子句所描述的值相同。

例如,假设RecVar是一个适当类型的变量。

可以使用Len函数来指定长度,如下:

OpenMyFileAs#1Len=Len(RecVar)

⑵在用Put语句随机访问文件时,因为2字节长的描述符总要添加到变量长度字符串上,所以变量长度字符串必须比Open语句的Len子句所指定的记录长度至少小2个字符。

"

⑶和变量长度字符串一样,Variant数据类型也需要2个字节的描述符。

包含变量长度字符串的Variants,需要4个字节的描述符。

因此,对于Variant中的变量长度字符串,其字符串长度必须比Len子句所指示的记录长度至少小4个字符。

12

20.磁盘已满(错误61)

⑴磁盘没有足够的空间完成Print#、Write#或Close操作。

⑵磁盘没有足够的空间来创建所需文件。

⑴将一些文件移到其他磁盘或删除掉一些文件。

⑵将一些文件移到其他磁盘或删除掉一些文件。

21.输入超出文件尾(错误62)

不能对文件尾位置后进行读入。

⑴Input#或LineInput#语句要到已读完文件或空文件中读入数据。

⑵在以Binary访问所打开的文件上使用EOF函数。

⑴在Input#语句之前直接使用EOF函数来测试是否处在文件的结尾。

⑵EOF只能用在顺序Input访问所打开的文件上。

在Binary访问所打开的文件上使用Seek和Loc。

22.记录号错误(错误63)

此错误发生在访问文件时。

Put或Get语句中的记录号小于或等于零。

检查产生记录号的计算应正确。

确保含有记录号的或在计算记录号时使用的变量,其拼写应正确。

除非在模块中加上OptionExplicit,不然变量名拼错了,会被视为隐含声明,且将其初始值设置为零。

13

23.权限被否定(错误70)

试图对写保护的磁盘进行写操作,或要访问加锁文件。

:

⑴为顺序Output或Append写,打开一个写保护文件。

⑵用顺序Output或Append方式,打开有写保护的磁盘上的文件。

⑶写入已被其他进程锁定的文件。

⑷试图访问注册表,但用户权限不包括此类注册表访问。

⑴用Input方式打开文件,或者修改文件的写保护属性。

⑵从磁盘上删除写保护,或者使用Input方式文件。

⑶等其他进程释放后再打开此文件。

}

⑷在32位MicrosoftWindows系统上,用户必须有访问当前系统注册表的权限。

改变用户权限,或由系统管理员来修改。

24.不能用不同的驱动器重新命名(错误74)

Name语句必须在当前的驱动器上重新命名文件。

用Name语句要将一个文件转移到不同的驱动器上。

使用FileCopy将文件写到另一个驱动器上,然后用Kill语句删除旧的文件。

~

25.路径/文件访问错误(错误75)

在文件访问或磁盘访问操作期间,例如,Open、MkDir、ChDir或RmDir,操作系统不能连接路径和文件名连接。

⑴文件指定的格式不正确。

14

⑵试图保存到只读文件上。

⑶在顺序Output或Append模式下试图打开只读文件。

⑴文件名可以包含完整限定的(绝对)或相对的路径。

完整限定的路径以驱动器名称(如果路径在另一台驱动器上)为开始,并且列出从根目录到文件的路径。

任何非完整限定的路径都是相对于当前驱动器和目录的。

⑵修改目标文件的只读属性或以其他文件名保存。

⑶以Input方式打开文件,或是要修改文件的只读属性。

26.路径未找到(错误76)

此文件路径包括指定的驱动器加上目录以及子目录,必须能遍历到文件的位置。

路径可以是相对的或绝对的。

在文件访问或磁盘访问期间,例如,Open、MkDir、ChDir或RmDir,此时操作系统不能找到指定的路径。

重新指定路径。

27.无效的样式串(错误93)

在Like的查找操作中指定的样式串无效。

对于非法字符列表的表达式,一个普通的例子就是[a-b,其右边方括号丢失了。

检查列表的表达式字符,是否正确。

15

28.文件格式非法(错误321)

磁盘文件一般以特定的格式来存放数据。

⑴装载一个文件到部件中,但文件中数据的格式与部件不兼容。

⑵将部件数据保存到文件中,但部件数据的格式与文件的格式不兼容。

⑴查阅部件的文档以决定磁盘文件数据应适合的格式,而且部件应提供格式转换的支持。

⑵查阅部件的文档以决定部件应提供格式转换的支持。

29.不能创建需要的临时文件(错误322)

创建可执行文件,需要建立一个临时性文件。

⑴包含TEMP环境变量所指定目录的驱动器已满。

⑵TEMP环境变量所指定的驱动器或目录无效或为只读。

⑴从已满的驱动器中删除文件或在TEMP环境变量中指定其他的驱动器。

⑵在TEMP环境变量中指定一个正确的驱动器,或从指定的驱动器或目录中删除只读的设置。

30.属性未找到(错误422)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1