这段需要对象 错误代码424为什么报424,VBPrivate

在VB中怎样编写错误处理程序
我的图书馆
在VB中怎样编写错误处理程序
在VB中怎样编写错误处理程序
王 语 宋国平王语(1966-),吉林辽源人,辽源分校网络中心主任,讲师。宋国平(1968-),吉林德惠人,吉林电大科长,讲师。
摘 要:在编写程序中难免会出现错误,从而导致得不到正确的结果。如何跟踪、避免和解决错误,是程序开发人员面临的不可回避的问题。本文结合实例,比较系统地阐述了利用编写错误处理程序来解决这一问题的方法。关键词:VB;错误处理;语句;处理程序
一、问题的提出我们在编程过程中难免出现一些这样或那样的的错误 ,使程序不能运行或是得不到正确的结果,所以我们要了解错误出现的原因并学会避免它。让我们来分析一下错误类型和产生错误的原因:语法错:在输入的语句不正确时发生。例如:关键字拼写错误、标点符号的缺失或者变量名拼写错误。例如:在使用If语句时没有相应的End If进行匹配将导致一个语法错。Visual Basic会在进行到下一条语句之前对语法错给出提示。运行错:在一个命令企图执行一个无效的动作时发生。例如:在企图把一个字符串赋值给一个数字类型的变量时发生运行错。在运行错发生时会激活错误处理程序。逻辑错:在程序既没有语法错也没有运行错的情况下执行程序得到的结果却不是正确的结果时,我们说发生了逻辑错。例如:应用程序要求用户提供口令,可是口令是正确的时候却不能进入应用程序,这时就说发生了逻辑错。二、解决的方法在这里我们主要说明一下运行错的解决方法。当一个程序运行出错时,vb提供了缺省的错误处理可以提供给用户出现错误的编号和对错误的一段简短描述并自动终止应用程序。举例来说,如果把一个很大的计算结果保存到一个整型变量中,会导致溢出的运行错。Visual Basic会给出下图所示的出错编号为6,原因为“溢出”的对话框。 由于Visual Basic不支持集中错误处理技术。每一个过程或事件都要求有一个错误处理程序来解决一个它自己的错误,所以我们必须自己编写错误处理程序。创建一个错误处理程序的三个基本步骤:激活一个错误处理程序 编写对可能发生的错误进行处理的代码继续程序的运行下面具体介绍一下详细步骤:通过激活错误处理程序来对运行错进行处理。在过程中使用On Error GoTo语句加一个命名的标号来激活错误处理程序。标号是用来指出错误发生时程序转向错误处理程序的入口。(Identifies a point in code to which the execution will branch when an error is encountered)。这部分代码称为"错误处理程序",命名和变量的命名一样,可以以冒号结尾。放在过程的Exit Sub语句之后。 下面的程序是DataErr错误处理程序实现对数据溢出错误的处理:Private Sub Command1-Click()&&&&On Error GoTo DataErr&&&&Dim num As Integer, var As Integer&&&&num=10&&&&var = num * 10000&&&&Print var&&&&Exit Sub&&&&DataErr:MsgBox “Try multiplying with a smaller integer”End Sub三、使用Err对象看过这个例子之后让我们来看看咋样使用Err对象:Err对象能报告包含和运行错相关的错误信息。可以帮助确定发生的错误类型、原因和错误发生的地方。Err的属性是由错误发生者设置的。错误可能是由Visual Basic或是编程者产生的。在运行错发生时,运行错的属性就被设置为能唯一标志这个错误的信息以及要求的处理。1、Err对象的属性Number属性返回或设置标识错误的编号。它是Err对象的缺省属性。它可以用来确定是哪一个错误发生了,它的值是错误的唯一标识。语法格式:Object.NumberDescription 属性返回或设置用来对错误进行描述的字符串。语法格式:Object.DescriptionSource属性返回或设置产生错误的应用程序的名字的字符串。当一个意外错误发生时,这个值被自动设置。语法格式:Object.Source返回或设置一个包含指向帮助文件所在位置的路径的字符串。语法格式:Object.HelpFileHelpContext属性返回或设置包含帮助文件中有关主题的上下文ID的字符串。语法格式:Object.HelpContext用Resume语句来实现继续运行程序。三种Resume语句:Resume语句程序从产生错误的语句开始接着运行。Resume Next语句程序从产生错误的语句的下一条语句接着运行。Resume line语句从Resume line语句后指定的标号或是行号处开始运行程序,注意标号或是行号指定的语句必须和错误处理程序在同一个过程中。在下面的例子中,使用到了上面提到的三种属性来处理一个除数为零的错误。Private Sub Result-Click()&&&&On Error GoTo err1&&&&Text3.Text = Text1.Text / Text2.Text&&&&Msgbox “Error resolved”&&&& Exit suberr1:&&&&MsgBox Err.Number&&&&MsgBox Err.Description&&&&MsgBox Err.Source&&&&If Err.〖ZK(〗Number = 11 Then&&&&&&&&&&&&Text2.Text = Text2.Text + 1&&&&End If&&&&ResumeEnd Sub2、&&&Err对象的方法?Clear方法在错误处理后清除Err对象的所有属性的值。使Resume语句或On Error语句之后或是结束一个子程序块或一个函数过程之后都会自动调用这个方法。语法格式:Object.ClearRaise方法这个方法用来产生一个错误。它是在测试和评估的时候使用的。这样可以主动地产生错误,以便在程序其他地方的错误处理程序来对它进行处理。语法格式:Object.Raise number,source,description,helpfile, helpcontext除了number以外的所有参数都是可选的请看下面的实例Private 〖ZK(〗Sub cmdError_Click?br& &&&&Dim num As Integer&&&&num=Val(Text1.Text)&&&&On Error GoTo NoErr&&&&Err.Raise numExit SubNoErr:&&&&Select case Err.NumberCase 6MsgBox “Data Overflow"Text1.SetFocusCase 11MsgBox "Division by zero"Text1.SetFocusCase elseMsgBox "Error not known"Exit Sub&&&&End selectText1.Text=“ "End Sub四、跟踪错误对程序中发生的错误进行捕获。当执行一个标志着错误处理程序开始的On Error语句时就引发了对错误的跟踪。当执行到Exit Sub、Exit Function、Exit Property、End Sub、End Function 或End Property语句时就意味着跟踪的结束。可以使用On Error GoTo 0来结束对错误的跟踪。考虑用下面两种跟踪和处理错误的方法 :即时处理和延时处理1、错误的即时处理在程序错误一发生时就转向错误处理程序并马上进行处理。“On Error GoTo line"语句给出了错误处理程序的入口位置。错误处理程序一般以一个标号开始,这个标号也就是在On Error GoTo语句中使用到的标号。错误处理程序采取相应的动作来解决出现的错误并从出错的语句或者出错语句的下一条语句接着运行程序。需要一条语句在错误处理程序完成后结束这个过程(Exit Sub)。2、错误的延时处理?这种方法中VB忽略发生的错误,但是代码最后检测到这个错误。用于象除数为零等这种错误。错误处理代码用来重新设置变量的值,使得程序可以继续执行下去。缺点是在可能出错的地方,都需要编写错误处理代码。Err对象在一个新的错误产生时不保存先前的错误信息。但是我们可以使用“On Error Resume Next"语句来激发这种错误处理方法。会让Visual Basic在错误已经发生后继续执行程序。下面的例子就是先查看Err对象的Number属性,如果该属性的值大于0,则表明有多个错误发生了。Private Sub Command1-Click()&&&&On Error Resume Next&&&&Text3.Text= Text1.Text / Text2.Text&&&&If Err.Number & 0 ThenIf Err.Number = 11 ThenText3.Text = 0ElseMsgBox “Input not valid"Exit SubEnd If&&&&End IfEnd Sub“On Error Resume Next"语句标志在此使用的是延迟处理的方法。同时也调用了Clear方法来清除并设置Err对象的属性,为下一个出现的错误做准备。 创建一个公共错误处理过程下面的代码就创建了一个函数Check,它在用户没有输入顾客的名称时产生一个错误:Function check( )&&&&If Text1.Text = “ ” Then&&&&&&&&&&&&Err.Raise 900, , “No blanks allowed”&&&&Else&&&&&&&&&&&&MsgBox “Record saved"&&&&End IfEnd FunctionPrivate Sub Save-Click()&&&&Call&&checkEnd Sub
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢2003年7月 总版技术专家分月排行榜第三
2013年7月 荣获微软MVP称号2012年7月 荣获微软MVP称号2006年1月 荣获微软MVP称号2008年1月 荣获微软MVP称号2007年1月 荣获微软MVP称号2005年1月 荣获微软MVP称号2003年9月 荣获微软MVP称号
本帖子已过去太久远了,不再提供回复功能。记住登录一个月发表随想还能输入:200字该用户最新代码编程随想&by by by by by by [vb]代码库Private Sub Form_Unload(Cancel As Integer)
Dim iAnswer As Integer
iAnswer = MsgBox("确定要退出吗?", vbYesNo)
If iAnswer = vbNo Then
Cancel = True
End Sub[代码运行效果截图]分享到:更多共1 条评论
发表评论:评论须知:1、评论每次加2分,每天上限为30;2、请文明用语,共同创建干净的技术交流环境;3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。Private Function CChinese(StrEng As String) As String
If Not IsNumeric(StrEng) Or StrEng Like "*.*" Or StrEng Like "*-*" Then
Private Function CChinese(StrEng As String) As String
If Not IsNumeric(StrEng) Or StrEng Like "*.*" Or StrEng Like "*-*" Then
If Trim(StrEng)
"" Then MsgBox "无效的数字"
CChinese = "": Exit Function
Dim intLen As Integer, intCounter As Integer
Dim strCh As String, strTempCh As String
Dim strSeqCh1 As String, strSeqCh2 As String
Dim strEng2Ch As String
strEng2Ch = "零壹贰叁肆伍陆柒捌玖"
strSeqCh1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"
strSeqCh2 = " 万亿兆"
StrEng = CStr(CDec(StrEng))
intLen = Len(StrEng)
For intCounter = 1 To intLen
strTempCh = Mid(strEng2Ch, Val(Mid(StrEng, intCounter, 1)) + 1, 1)
If strTempCh = "零" And intLen
If Mid(StrEng, intCounter + 1, 1) = "0" Or (intLen - intCounter + 1) Mod 4 = 1 Then
strTempCh = ""
strTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))
If (intLen - intCounter + 1) Mod 4 = 1 Then
strTempCh = strTempCh & Mid(strSeqCh2, (intLen - intCounter + 1) \ 4 + 1, 1)
If intCounter > 3 Then
If Mid(StrEng, intCounter - 3, 4) = "0000" Then strTempCh = Left(strTempCh, Len(strTempCh) - 1)
strCh = strCh & Trim(strTempCh)
CChinese = strCh
End Function
请每一行都给解释一下。必竟我很菜。
Private Funct相关信息n CChinese(ByVal StrEng As String) As String
If Not IsNumeric(StrEng) Or StrEng Like "*.*" Or StrEng Like "*-*" Then
'如果变量StrEng不是数字或者形如*.*(如1.2)或者形如*-*(如1-2)
If Trim(StrEng)
"" Then MsgBox("无效的数字")
'如果变量StrEng去除两端空格后不为空,则弹出对话框说明是无效的数字
CChinese = "" : Exit Function
'函数返回空字串并结束函数
Dim intLen As Integer, intCounter As Integer
Dim strCh As String, st......
Private Funct相关信息n CChinese(ByVal StrEng As String) As String
If Not IsNumeric(StrEng) Or StrEng Like "*.*" Or StrEng Like "*-*" Then
'如果变量StrEng不是数字或者形如*.*(如1.2)或者形如*-*(如1-2)
If Trim(StrEng)
"" Then MsgBox("无效的数字")
'如果变量StrEng去除两端空格后不为空,则弹出对话框说明是无效的数字
CChinese = "" : Exit Function
'函数返回空字串并结束函数
Dim intLen As Integer, intCounter As Integer
Dim strCh As String, strTempCh As String
Dim strSeqCh1 As String, strSeqCh2 As String
Dim strEng2Ch As String
'以上四行申明变量,不详细解释了
strEng2Ch = "零壹贰叁肆伍陆柒捌玖"
strSeqCh1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"
strSeqCh2 = " 万亿兆"
'以上三行初始化变量,不详细解释了
StrEng = CStr(CDec(StrEng))
'将变量StrEng转化为Decimal类型, 然后再转化为字符串类型(Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算)
intLen = Len(StrEng)
'获得变量StrEng字符串的长度,并储存在intLen中
For intCounter = 1 To intLen
'计数器, 从1到intLen循环,不详细解释
strTempCh = Mid(strEng2Ch, Val(Mid(StrEng, intCounter, 1)) + 1, 1)
'Val(Mid(StrEng, intCounter, 1))返回变量StrEng中的和计数器对应的当前字符,并将该字符转化为数字类型;
'将如自变量StrEng为123,则第一轮循环则返回1,第二轮循环返回2,第三轮循环返回3,注释中我们暂计为x
'然后Mid(strEng2Ch, Val(Mid(StrEng, intCounter, 1)) + 1, 1)返回"零壹贰叁肆伍陆柒捌玖"中第x+1个,实际效果是将数字转化为大写形式
'如第一轮循环,则将1转化为壹,第二轮循环将2转化为贰
'***********************************************************************************************************************
'函数解释:Mid(str,a,b),其中str为字符串类型,a,b为整型;则该函数返回str中,从第a个字符开始的b个字符.如Mid("abcdef",3,2),则返回cd
'***********************************************************************************************************************
If strTempCh = "零" And intLen
'入过strTempCh为"零"并且变量长度不等于1
If Mid(StrEng, intCounter + 1, 1) = "0" Or (intLen - intCounter + 1) Mod 4 = 1 Then
'如果变量StrEng的下一个字符为零 或者 (剩余字符串长度+1)除4余1,也就是剩余字符串长度恰为4的倍数
strTempCh = ""
'strTempCh置为空
strTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))
'将strTempCh与" 拾佰仟 拾佰仟 拾佰仟 拾佰仟"中的相应字符连接
'还用123来打比方,第一轮循环到此处时strTempCh为"壹";intLen - intCounter + 1 = 3,则Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))为"佰"
If (intLen - intCounter + 1) Mod 4 = 1 Then
'如果(剩余字符串长度+1)除4余1,也就是剩余字符串长度恰为4的倍数
strTempCh = strTempCh & Mid(strSeqCh2, (intLen - intCounter + 1) \ 4 + 1, 1)
'将strTempCh与" 万亿兆"中的相应字符连接
'用12345来打比方, 第一轮循环到此处时strTempCh为"壹",intLen - intCounter + 1 = 5,5\4+1 = 2,则Mid(strSeqCh2, (intLen - intCounter + 1) \ 4 + 1, 1)为"万"
If intCounter > 3 Then
'如果计数器大于三
If Mid(StrEng, intCounter - 3, 4) = "0000" Then strTempCh = Left(strTempCh, Len(strTempCh) - 1)
'如果变量StrEng中连续四个为0,则去掉strTempCh的最后一个字符
strCh = strCh & Trim(strTempCh)
'将strTempCh储存到strCh中
CChinese = strCh
'返回strCh
End Function
其他答案(共1个回答)
执行LZ的代码,只见LZ指明行报错这一行被黄色警告前未加注释 '改为D.cells(i, 6) = C.cells(j, 6) '这一行被黄色警告执行代码未见错...
按照楼上的方法改好图标,另外有多个图标想选的话,按照下面的方法工程-工程属性(最下面的)-生成-然后就可以改图标了
你才上初中就研究Java了,真厉害!呵呵!!这段代码应该是一个Bean类中的一个方法,主要功能是按照你给的图片,建立一个名为 g的图片,也就是说把你给的图片,复...
/*你很讨厌啊,这么烦死人的东西。不清楚你的C编译器支持中文么?*/#include #include #include #include #include #...
答: 急!!!是否要闭经?
答: cisco网络技术是一个为CTO、IT技术经理、网络工程师、安全工程师、数据库工程师、网络管理员、系统工程师、开发工程师、项目管理人员等IT技术人员搭建的有关先...
答: 我想学网页制作、网络维护、电脑维护可有比较好的学习网站或者论坛推选一下?你好!网易学院
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415

我要回帖

更多关于 vb运行错误424 的文章

 

随机推荐