笔记本电脑维修查询_硅基智慧

柳州硬盘数据恢复的费用_Excel VBA程序错误处理基本教程

笔记本无法开机 办公软件

关于程序错误处理,柳州硬盘数据恢复的费用这是一个常见且容易被忽略的问题。顾名思义,错误处理是发生错误时的程序处理过程。为什么会有错误处理?如果没有错误处理该怎么办?

让我们首先简要讨论以上两个问题柳州硬盘数据恢复的费用。

Excel VBA程序

1.为什么要进行错误处理?这是因为任何程序都不可能说不会发生错误(请注意:我们在这里谈论的错误仅是指狭窄的逻辑错误,并且不包括语法错误)。

2.如果没有错误处理会怎样?让我们首先看一个简单的代码柳州硬盘数据恢复的费用:

SubTest()

DimMAsLong

DimNAsLong

M = Val(InputBox(“请输入整数”,“ M * N”))

N = Val(InputBox(“请输入整数”,“ M * N”))

MsgBoxCStr(M)&“×”&CStr(N)&“ =”&CStr(M * N)

结束子

这是输入两个整数并输出两个数字的乘积的过程。该程序有错误吗?输入“ 3”,然后输入“ 2”,程序立即输出“ 3×2 = 6”。这个程序永远不会犯错误吗?答案是否定的,如果在两次输入“ A”时都输入错误,则程序将报告错误,因此,只要确保两个输入均为整数,程序就不会出错。答案仍然是负的,只要输出的两个数字的乘积大于2147483647,程序仍然会出错。这验证了一个句子:永远不要信任用户输入。

柳州硬盘数据恢复的费用

由于该程序容易出错,因此错误处理是该程序不可缺少的一部分。柳州硬盘数据恢复的费用任何优秀的程序员都不能忽略此链接,没有人希望使他的程序随时可能弹出错误对话框。它被非法关闭。

因此,现在我们面临一个新问题:如何处理错误?

我相信大多数人会立即想到OnErrorGotoXXXX(XXXX代表标签或行号)和OnErrorResumeNext。是的,这是两种最常见的错误处理方法。但是有多少人真正理解这两个句子?我知道很多人每天都用这两个句子,你可以随便说。今天,我们将不解释这两个句子的功能和含义。让我们先拆开它们。 OnErrorGotoXXXX和OnErrorResumeNext,我们首先将它们分解为OnError,Goto,ResumeNext。首先让我们看一下OnError的帮助。

OnError语句

启动错误处理程序并指定子例程在进程中的位置;它也可以用来禁用错误处理程序柳州硬盘数据恢复的费用。

语法

OnErrorGoToline

OnErrorResumeNext

OnErrorGoTo0

OnError语句的语法可以具有以下任何一种形式:

OnErrorResumeNext指示,当发生运行时错误时,控制权将在发生错误的语句之后立即转到该语句,然后继续在该位置运行。访问对象时,请使用此表单而不是OnErrorGoTo。

OnErrorGoTo0禁止在当前进程中启动的任何错误处理程序。

注意:如果不使用OnError语句,则任何运行时错误都是致命的。也就是说,结果将导致显示错误消息并中止操作。

“允许的”错误处理程序是由OnError语句打开的处理程序; 柳州硬盘数据恢复的费用“活动”错误处理程序是在处理错误的过程中允许的错误处理程序。如果在错误处理程序处于活动状态时发生错误(错误发生与执行Resume,ExitSub,ExitFunction或ExitProperty语句之间的时间),则当前进程的错误处理程序将无法处理该错误。 。控制返回到调用过程。如果调用进程具有已启动的错误处理程序,则将激活错误处理程序以处理错误。如果调用过程的错误处理程序也处于活动状态,则控件将返回到先前的调用过程,依此类推,直到找到允许但未处于活动状态的错误处理程序。如果找不到允许的非活动错误处理程序,则错误本身在实际发生错误的地方很严重。每次错误处理程序将控件返回给调用过程时,该过程都会成为当前过程。在任何过程中错误处理程序处理完错误后,它将从当前进程中Resume语句指定的位置恢复。

Resume语句的语法可以采用以下任何形式:

声明说明

恢复如果错误和错误处理程序发生在同一进程中,请从生成错误的语句中恢复操作。如果在被调用过程中发生错误,请从最后一个包含错误处理程序的调用该过程的语句继续操作。

ResumeNext如果错误和错误处理程序出现在同一程序中,柳州硬盘数据恢复的费用则从产生错误的语句之后的语句立即恢复操作。如果错误发生在被调用的过程中,则上次调用包含错误处理程序的过程的语句(或OnErrorResumeNext语句)将从紧随该语句之后的语句中恢复。

Resumeline恢复在必要的line参数指定的行上运行。 line参数是行标签或行号,柳州硬盘数据恢复的费用并且必须与错误处理程序处于同一过程中。

说明:在错误处理程序之外的任何地方使用Resume语句将导致发生错误。

我们看到了ResumeNext,但是很明显,它只是Resume三种调用方法中最常见的一种,但是以上信息就足够了,我们可以使用ResumeNext来满足上述要求。

SubTestError2()

DimIAsLong

OnErrorResumeNext'指定发生错误时不进行处理,柳州硬盘数据恢复的费用并直接运行next语句

I =“ A1”'发生错误,并且Err对象立即被返回,因为已将其指定为在发生错误时不进行处理。

调试打印“忽略的错误,错误代码:”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 I =“&I的Source&”当前值

呃。清除'清除所有错误记录

OnErrorGoToERROR2'指定当发生以下错误时,直接跳转到Error2标签

I = 2147483648#'发生错误,因为指定了跳转,柳州硬盘数据恢复的费用因此请直接转到Error1而不是执行以下语句

I = 100',因为在Error2之后上面指定了ResumeNext,因此程序将再次返回此处以开始执行,这与进程TestError1不同

调试打印”程序正常返回,I =“&I的当前值

ExitSub

错误2:

调试打印“发生错误,错误代码:柳州硬盘数据恢复的费用”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 I =“&I的Source&”当前值

ResumeNext'返回发生错误的下一条语句并继续执行

结束子

如果在错误处理期间再次发生错误怎么办?柳州硬盘数据恢复的费用也许您考虑过使用OnErrorResumeNext,所以我们有这样一个程序

SubTestError3()

DimIAsLong

OnErrorGoToERROR3'指定发生错误时不进行处理,并直接运行下一条语句

I =“ A1”'发生错误,因为指定了跳转,所以直接转到Error3而不是执行以下语句

调试打印“发生错误,错误代码:”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 I =“&I的Source&”当前值

错误3:

呃。清除'清除所有错误记录

OnErrorResumeNext'指定当发生以下错误时,请忽略该错误并直接跳至下一条语句以继续执行

I = 2147483648#'发生错误。由于已指定在发生错误时将不进行任何处理,因此应立即返回Err对象。

“但是由于先前的I =“ A1”错误,柳州硬盘数据恢复的费用Err对象本身处于活动状态,因此此错误与我们预期的不同

'只需忽略该错误并跳至下一个错误,但会出现严重错误,将弹出一个错误对话框,程序挂起

调试打印“忽略的错误,错误代码:”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 I =“&I的Source&”当前值

我= 100

调试打印”程序正常返回,当前值为I =“&I

结束子

执行后,我们发现了一个严重的问题,柳州硬盘数据恢复的费用该程序仍然引发异常并被暂停。到底是怎么回事?很难继续使用ResumeNext吗?有了这个问题,我们再次回到OnError的帮助下。有这段话:

“活动”错误处理程序是在处理错误的过程中允许的错误处理程序。如果在错误处理程序处于活动状态时发生错误(错误发生与执行Resume,ExitSub,ExitFunction或ExitProperty语句之间的时间),则当前进程的错误处理程序将无法处理该错误。

事实证明,错误处理过程只能处理其他人的错误。一旦错误处理过程本身发生错误,因为错误处理过程已经处于活动状态,它将不再能够处理错误。正是由于在错误处理过程中发生了错误,程序仍被挂起。那么,我们应该怎么做才能获得想要的结果?由于错误处理过程无法在活动状态下处理错误,我们是否应该将错误处理过程返回到非活动状态?我们不得不邀请Resumeline参加比赛。

SubTestError4()

DimIAsLong

OnErrorGoToERROR4'指定在发生错误时不进行处理,柳州硬盘数据恢复的费用并直接运行下一条语句

I =“ A1”'发生错误,因为指定了跳转,所以直接转到Error3而不是执行以下语句

调试打印“发生错误,错误代码:”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 I =“&I的Source&”当前值

错误4:

呃。清除'清除所有错误记录

ResumeERROR4_Next'指定已处理错误陷阱并返回ERROR4_Next,

“这样做的目的是释放Err对象错误处理并使以下OnErrorResumeNext生效。

ERROR4_下一个:

OnErrorResumeNext'指定以下错误发生错误时将其忽略,并直接跳至下一条语句以继续执行

I = 2147483648#'发生错误,并且由于指定了发生错误时将不处理该对象,因此会立即返回Err对象

调试打印“忽略的错误,错误代码:”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 I =“&I的Source&”当前值

我= 100

调试打印”程序正常返回,I =“&I的当前值

结束子

运行之后,我们终于看到了想要的结果。

通过上述一系列实验,当我们回顾OnErrorGoto0和Resume0时,很容易理解。让我们尝试另外两个程序:

SubTestError5()

DimIAsLong

OnErrorResumeNext

I = 2147483648#'发生错误,并且由于指定了发生错误时将不处理该对象,因此会立即返回Err对象

调试打印“忽略的错误,错误代码:”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 I =“&I的Source&”当前值

OnErrorGoTo0'停止处理当前进程中的错误。

I =“ A1”'由于错误处理已停止,因此程序将在此处弹出错误并挂起。

I = D'发生隐性错误,并且D的值大于Long可以表示的2147483647的最大值

调试打印”程序正常返回,I =“&I的当前值

ExitSub

错误6:

调试打印“发生错误,错误代码:”&Err。编号&“错误消息”&Err。说明&“错误源:”&Err。 Source&“ I =”的当前值&I&“ D =”&Format(D,“ ###,###”)的当前值

D = D-1

Resume'Resume等效于Resume0,即返回到最后一个错误语句以继续执行,请注意区分它与ResumeNext之间的区别。

'由于发生错误时,前一个D = D-1使D减1,

“这会使程序在D等于2,147,483,647时正常返回和退出,但是请谨慎使用此方法,

'由于D小于Long的最小负数可以表示-2,147,483,648,因此程序将继续循环并产生错误。

'最后停止D溢出错误,相信我,柳州硬盘数据恢复的费用这将是一个非常痛苦的等待^ _ ^

结束子

这两段代码非常清晰,运行它们后您可以直接看到结果。

标签:柳州硬盘数据恢复的费用 ExcelVBA程序