[转]VBA常用命令解析之001——On Error(将错就错)
2009-03-04 18:27
218 查看
VBA常用命令解析之001——On Error(将错就错)
谁都希望自己的程序能一顺百顺,但是错误却一直是我们心中的痛。总是时不时地跳出来影响我们的情绪。虽然跳出来的错误提示会中断我们程序的运行,但是它
就象我们的痛感觉神经一样,是一种保护。可以避免得到不正确的结果,甚至灾难性的后果发生。我们可以通过进一步的程序设计和改进来避免错误中断我们的程
序。
在日常生活中,我们知道手术前最重要的一项工作是麻醉止痛,在VBA
程序中也有麻醉止痛剂,它就是On Error
Resume Next,使用这条语句后就不会有错误跳出来中断程序的运行了。但是就象生物失去痛觉一样是很危险的,一但程序一直处于麻醉状态后果也是不可预料的。可见On Error
Resume Next并不是一剂万能药。滥用会错上加错还可能付出惨重的代价。如果能很好的利用这一语句,不仅可以避免错误,还会达到意想不到效果。
常见的错误一般有两类:代码书写错误和程序运行时的不期错误。第一类错误在程序的调试期间,就可以发现它们并加以解决。最麻烦的是第二类错误。
在处理第二类错误时,我们除了细心设计程序外,还应该认真考虑可能出现的错误。这就是程序的容错性,使程序更加健壮。
例1:
在一个Excel
文件
中,删除工作表时,如不事先判断工作表是否存在时就会出错。用常规判断会浪费很多代码。这里唯一能出现的错误就是目标不存(下标越界),而这也是我们想达到目的。不如将错就错。
代码:
Sub Main() Call DelTable("临时表") End Sub Sub DelTable(sName As String) On Error Resume Next Worksheet s(sName).Delete On Error GoTo 0 End Sub
On Error GoTo 0是什么?它就是On Error Resume Next的解药。是让你的VBA程序苏醒过来。请大家注意使用On
Error Resume Next后一定要 养成用On Error GoTo 0解开它的习惯,不然你的程序有错误,也很难发现了。
例2:
在一用户窗体中,根据用户输入的工作表名新建一工作表,如不事先判断是否有同名的工作表存在,就可能发生错误。可以用循环语句来实现判断工作表是否存在,也可以利用On Error Resume Next语句进行将错就错地判断。
代码:
Sub main() If OkExcelExist("Sheet1", ThisWorkbook) Then MsgBox "工作表已经存在!!" End If End Sub Function OkExcelExist(sSheetName As String, w As Workbook) As Boolean Dim ws As Worksheet OkExcelExist = True On Error Resume Next Set ws = w.Worksheets(sSheetName) On Error GoTo 0 If ws Is Nothing Then OkExcelExist = False Set ws = Nothing End Function
在本例中,只有sSheetName表不存在时,才可能发生错误。因此可以加以利用。
例3:
如果说以上两例通过其它方式也能很容易的实现判断,那么本例如果用常规的代码将会很难实现。看一下原贴。
引用:
[求助
]怎么实现输入的数据
代表excel单元
格
引用的合法性检查?
我需要在vba的textbox中输入数据,然后用这个数据去指定excel的单元格位置
,如何使输入的数据合法?
比如我在textbox中输入数据:“a2”,我用range(textbox.text).value=“ok”给excel的a2单元格填写数据
“ok”,如何保证我输入的“a2”一定表示了单元格的位置,而不是其他比如“kkkk”或者“1234”等不能表示单元格的字符?
如果这个问题用常规方法解决,需要编写大量的代码,需要全面地考虑每一个细节。但是仍不能保证正确。那么看一下如何用
代码:
Private Sub CommandButton1_Click() Dim str As String str = Trim(TextBox1.Text) '取值 If Not OkExcel(str) Then '非法则显示提示信息 MsgBox str & "不是合法单元格地址", vbOKOnly + vbCritical, "智能Excel" Exit Sub '退出子过程 End If '下面加其它语句 End Sub '------------------------------------ Function OkExcel(str As String) As Boolean Dim r As Range On Error Resume Next '发生错误则执行下一条语句 Set r = Range(str) '将r附值,如果发生错误则说明str中的数据,不是一个合法的单元格地址 OkExcel = (err.Number = 0) '如果err.Number不是0,则说明发生过错误 On Error GoTo 0 '好习惯,恢复正常,虽然结束本过程后自动 会恢复 End Function
短短的几行就解决了这一很杂问题!
学会这招吧!
___________________________________________________________________
全文完,
原文URL: http://www.okexcel.com.cn/bbs/viewthread.php?tid=168
相关文章推荐
- 深入解析Linux 常用命令--route
- Windows系统下MySQL的常用命令解析
- npm常用命令解析
- maven常用命令和pom文件解析
- maven 常用命令和配置文件解析
- npm常用命令解析
- 企业Linux系统管理员常用命令大全实例解析(2)
- VBA常用命令
- Linux 常用命令解析 cd pwd
- Linux监控JVM常用命令解析
- 深入解析Linux 常用命令--alias
- Linux 系统应用编程——网络编程(常用命令解析)
- 【Git之窗】(三)几个最常用的命令解析
- linux常用命令解析
- Linux 系统应用编程——网络编程(常用命令解析)
- 【书摘001】android 底层开发技术实战详解 - 基础 - 进程管理的一些常用命令
- 【Linxu学习001】Linux常用命令
- Linux下的基本常用命令解析
- LDAP常用命令解析
- 深入解析Linux 常用命令--arping