VisualBasic60常见错误及解决方案.docx
- 文档编号:4148401
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:24
- 大小:26.01KB
VisualBasic60常见错误及解决方案.docx
《VisualBasic60常见错误及解决方案.docx》由会员分享,可在线阅读,更多相关《VisualBasic60常见错误及解决方案.docx(24页珍藏版)》请在冰豆网上搜索。
VisualBasic60常见错误及解决方案
VisualBasic60常见错误及解决方案
VisualBasic常见错误及解决方案
以下“解决方案”中的内容对应的是“错误分析”中内容的解决方法。
1.无效的过程调用或参数(错误5)
错误原因
有些调用操作不能完成。
错误分析
。
⑴参数值可能超出了允许的范围。
例如,Sin函数只接受特定范围的值。
正的参数小于2,147,483,648的是可接受的,而等于2,147,483,648则会产生错误。
⑵如果所要调用的过程不适于当前平台的话,也会发生此错误。
例如,有些程序可能只应用到MicrosoftWindows或Macintosh等。
解决方案
⑴检查参数的许可范围。
⑵检查过程的特定平台信息。
2.溢出(错误6)
错误原因
当赋值超出目标的限制时,就会发生溢出。
;
错误分析
⑴赋值、计算或数据类型的结果的转换太大,以致于不能在变量类型所允许的范围内表示出来。
⑵给属性的赋值超过属性能接受的最大值。
⑶试图在计算中使用一个数字,并且该数字被强制为一个整数,但是结果超过了整数的范围,例如:
DimxAsLong
x=2000*365'错误:
溢出
VisualBasic
2
、
解决方案
⑴赋值给足够表示值的范围的类型的变量上。
⑵确保赋值适合属性的范围。
⑶要解决这个问题,请按如下方式键入该数字:
DimxAsLong
x=CLng(2000)*365
3.内存溢出(错误7)
错误原因
…
需要更多的内存空间,或是遇到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。
VisualBasic
4
...
>
EndSub
⑵对模块层次动态数组,要重新确定大小,而某一个元素已经作为参数传给了过程。
例如,在下列的代码中,ModArray是模块层次动态数组,却将其第56个元素以按引用传给Test过程:
DimModArray()AsInteger'创建一个模块层次动态数组。
...
SubAliasError()
ReDimModArray(1To73)AsInteger
TestModArray(45)'传模块层次动态数组的元素
'给Test过程。
/
EndSub
SubTest(SomeIntAsInteger)
ReDimModArray(1To40)AsInteger'错误在这里发生。
EndSub
⑶赋一个值给包含数组的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循环的对象时,可以读入数组,但不能写入。
VisualBasic常见错误及解决方案王牌8
5
6.除数为零(错误11)
《
错误原因
除数为零是不允许的。
错误分析
表达式的值作除数使用,但其为零。
解决方案
检查在表达式中变量的拼写。
拼写错误的变量名会被当成数值变量并且初始值为零。
检查表达式中变量的前一个操作,尤其是从其他过程传送给过程的参数。
7.串空间溢出(错误14)
错误原因
$
VisualBasic允许使用非常大的字符串。
然而,其他程序的需求和处理字符串的方法可能导致这种错误。
错误分析
⑴使用的表达式为计算所创建的临时字符串,可能产生此错误。
例如,下列的代码在一些操作系统上将产生Outofstringspace的错误:
MyString="Hello"
ForCount=1To100
MyString=MyString&MyString
NextCount
⑵系统内存溢出,致使不能给字符串分配空间。
{
解决方案
⑴将字符串赋值给其他名称的变量。
⑵删除不需要的应用程序以增加可用的内存空间。
8.不能执行所需的操作(错误17)
错误原因
如果此操作会导致工程的当前状态无效,则操作将不能执行。
VisualBasic
6
!
错误分析
⑴所要求的操作不能作用在工程当前的状态。
例如,当程序正处于中断模式时,使用“引用”对话框来添加一个对工程或对象库的新引用时,就会发生此错误。
⑵试图修改正在执行的代码。
例如,试图从文件读出代码然后加到正在执行的模块中。
解决方案
⑴停止执行当前的代码,然后重试此操作。
⑵虽然可以修改工程中当前并非真正执行的模块,但不能修改正在运行的模块。
如要要做这样的修改,必须停止当前正在运行的模块,再添加或修改,然后重新执行。
9.出现用户中断(错误18)
错误原因
'
进程的中断执行是很有用的,如果不进行处理则会使应用程序中止。
错误分析
用户按CTRL+BREAK或其他中断键。
解决方案
在开发环境中可继续执行。
避免在运行时出现这种情况,应使用合适的方法处理此错误。
10.未发生错误而出现Resume(错误20)
错误原因
Resume语句只能在错误处理程序内出现,而且只能在活动的错误处理程序中执行。
【
错误分析
⑴将Resume语句放在错误处理程序的代码之外。
⑵代码即使没有错误也跳到了错误处理程序之中。
解决方案
⑴将此语句移到错误处理程序之内,或删除它。
⑵也许拼错了行标签。
不能经过过程跳到标签,所以搜寻过程中注明错误处理程序的标签。
如果找到了重复的GoTo语句的目标标签,而不是属于OnErrorGoTo语句的目标标签的话,修改行标签使与所要的目标标签一致。
VisualBasic常见错误及解决方案王牌8
7
%
11.堆栈空间溢出(错误28)
错误原因
堆栈是内存的一个工作区,会随着程序运行的需要而增长或缩小
错误分析
⑴有太多活动的Function、Sub或Property过程调用。
⑵本地变量需要更多可用的本地变量空间。
⑶有太多定长字符串。
⑷DoEvents函数调用的嵌套太多。
(
⑸代码引起了事件层叠。
解决方案
⑴检查过程的嵌套是否太深,尤其是递归过程,即自己调用自己的过程。
确保递归能终止,使用“调用”对话框来查看活动的过程(在堆栈上)。
⑵试着在模块级别中声明某些变量。
可以在静态过程,即在Property、Sub或Function关键字前加上Static,声明所有变量,或可以在过程内使用Static语句来声明各个Static变量。
⑶定长字符串在过程中可快速访问,比可变长度字符串使用更多堆栈空间,因为字符串数据本身要放在堆栈上。
可试着重新定义一些定长字符串成为变长字符串。
当声明一变长字符串时,只有字符串描述符(非数据本身)会放在堆栈上。
可以在没有堆栈空间的模块层次上定义字符串。
在模块层次申明变量是缺省为Public,所以在模块上所有过程皆可见到字符串。
⑷利用“调用”对话框,在堆栈上查看正在活动的过程。
⑸所谓事件层叠就是引起一个事件,此事件会调用已在堆栈上的事件过程。
事件层叠和不能中止的递归过程调用是相似的,但不太明显,因为是由VisualBasic所调用,而不是在代码中调用。
使用“调用”对话框来查看那些正在活动的过程(在堆栈上)。
12.DLL应用程序客户太多(错误47)
[
错误原因
VisualBasic中动态链接库(DLL)一次只能容纳50个主机应用程序访问。
错误分析
应用程序和其他VisualBasic主应用程序(一些可能是应用程序访问的)都同时访问VisualBasicDLL。
VisualBasic
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产品支持服务联系,告知所发生的情况。
VisualBasic常见错误及解决方案王牌8
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
/
VisualBasic
10
16.找不到指定的文件(错误53)
错误原因
所指定的文件找不到。
错误分析
⑴如Kill、Open或Name等语句,引用到一个不存在的文件。
⑵试图调用动态链接库(DLL)中的过程,但找不到在Declare语句的Lib子句中所指定的库文件名。
.
⑶在开发环境中,如果试图打开并不存在的工程或装载不存在的文本文件,将发生错误。
解决方案
⑴检查文件名的拼写以及指定的路径。
⑵检查文件名的拼写以及指定的路径。
⑶检查文件名或工程名的拼写以及指定的路径。
17.文件模式错误(错误54)
错误原因
处理文件内容中的语句,必须与打开文件时的模式一致。
错误分析
⑴将Put或Get语句指定给了顺序文件。
⑵将Print#语句使用在非Output或Append访问方式所打开的文件上。
⑶将Input#语句使用在非Input访问模式所打开的文件上。
⑷试图对一个只读文件进行写。
解决方案
⑴Put和Get只能在以Random或Binary访问方式打开的文件上使用。
⑵用另外的语句把数据放到文件中或以合适的模式重新打开文件。
|
⑶用另外的语句把数据放到文件中或以Input模式重新打开文件。
⑷修改文件的读/写状态或放弃写入。
VisualBasic常见错误及解决方案王牌8
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个字符。
VisualBasic
12
20.磁盘已满(错误61)
错误分析
⑴磁盘没有足够的空间完成Print#、Write#或Close操作。
⑵磁盘没有足够的空间来创建所需文件。
解决方案
⑴将一些文件移到其他磁盘或删除掉一些文件。
⑵将一些文件移到其他磁盘或删除掉一些文件。
21.输入超出文件尾(错误62)
错误原因
不能对文件尾位置后进行读入。
错误分析
⑴Input#或LineInput#语句要到已读完文件或空文件中读入数据。
⑵在以Binary访问所打开的文件上使用EOF函数。
…
解决方案
⑴在Input#语句之前直接使用EOF函数来测试是否处在文件的结尾。
⑵EOF只能用在顺序Input访问所打开的文件上。
在Binary访问所打开的文件上使用Seek和Loc。
22.记录号错误(错误63)
错误原因
此错误发生在访问文件时。
错误分析
Put或Get语句中的记录号小于或等于零。
解决方案
检查产生记录号的计算应正确。
确保含有记录号的或在计算记录号时使用的变量,其拼写应正确。
除非在模块中加上OptionExplicit,不然变量名拼错了,会被视为隐含声明,且将其初始值设置为零。
VisualBasic常见错误及解决方案王牌8
13
23.权限被否定(错误70)
错误原因
试图对写保护的磁盘进行写操作,或要访问加锁文件。
错误分析
:
⑴为顺序Output或Append写,打开一个写保护文件。
⑵用顺序Output或Append方式,打开有写保护的磁盘上的文件。
⑶写入已被其他进程锁定的文件。
⑷试图访问注册表,但用户权限不包括此类注册表访问。
解决方案
⑴用Input方式打开文件,或者修改文件的写保护属性。
⑵从磁盘上删除写保护,或者使用Input方式文件。
⑶等其他进程释放后再打开此文件。
}
⑷在32位MicrosoftWindows系统上,用户必须有访问当前系统注册表的权限。
改变用户权限,或由系统管理员来修改。
24.不能用不同的驱动器重新命名(错误74)
错误原因
Name语句必须在当前的驱动器上重新命名文件。
错误分析
用Name语句要将一个文件转移到不同的驱动器上。
解决方案
使用FileCopy将文件写到另一个驱动器上,然后用Kill语句删除旧的文件。
~
25.路径/文件访问错误(错误75)
错误原因
在文件访问或磁盘访问操作期间,例如,Open、MkDir、ChDir或RmDir,操作系统不能连接路径和文件名连接。
错误分析
⑴文件指定的格式不正确。
VisualBasic
14
⑵试图保存到只读文件上。
《
⑶在顺序Output或Append模式下试图打开只读文件。
解决方案
⑴文件名可以包含完整限定的(绝对)或相对的路径。
完整限定的路径以驱动器名称(如果路径在另一台驱动器上)为开始,并且列出从根目录到文件的路径。
任何非完整限定的路径都是相对于当前驱动器和目录的。
⑵修改目标文件的只读属性或以其他文件名保存。
⑶以Input方式打开文件,或是要修改文件的只读属性。
26.路径未找到(错误76)
错误原因
此文件路径包括指定的驱动器加上目录以及子目录,必须能遍历到文件的位置。
路径可以是相对的或绝对的。
…
错误分析
在文件访问或磁盘访问期间,例如,Open、MkDir、ChDir或RmDir,此时操作系统不能找到指定的路径。
解决方案
重新指定路径。
27.无效的样式串(错误93)
错误原因
在Like的查找操作中指定的样式串无效。
错误分析
—
对于非法字符列表的表达式,一个普通的例子就是[a-b,其右边方括号丢失了。
解决方案
检查列表的表达式字符,是否正确。
VisualBasic常见错误及解决方案王牌8
15
28.文件格式非法(错误321)
错误原因
磁盘文件一般以特定的格式来存放数据。
¥
错误分析
⑴装载一个文件到部件中,但文件中数据的格式与部件不兼容。
⑵将部件数据保存到文件中,但部件数据的格式与文件的格式不兼容。
解决方案
⑴查阅部件的文档以决定磁盘文件数据应适合的格式,而且部件应提供格式转换的支持。
⑵查阅部件的文档以决定部件应提供格式转换的支持。
29.不能创建需要的临时文件(错误322)
错误原因
—
创建可执行文件,需要建立一个临时性文件。
错误分析
⑴包含TEMP环境变量所指定目录的驱动器已满。
⑵TEMP环境变量所指定的驱动器或目录无效或为只读。
解决方案
⑴从已满的驱动器中删除文件或在TEMP环境变量中指定其他的驱动器。
⑵在TEMP环境变量中指定一个正确的驱动器,或从指定的驱动器或目录中删除只读的设置。
30.属性未找到(错误422)
:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VisualBasic60 常见 错误 解决方案