Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6095|回复: 17

[VBA] 007-开发完善的程序-疑难千寻千解丛书(VBA)

  [复制链接]
发表于 2011-1-12 16:09 | 显示全部楼层 |阅读模式
ET疑难千寻千解丛书之EXCEL2010编程与实践
罗刚君 章兰新 黄朝阳 编著

疑难7
如何开发完善的程序
编写代码解决一个工作问题是很简单的,但是如何让程序完善,可以适应所有环境,且通用、兼容、可防错,这是一门相当复杂的学问。那么如何开发一个完善的程序,程序开发常会有什么错误及如何防范呢?
è 解决方案
通过常规思路开发一段程序完成基本需求;然后查找存在的问题并进行完善;再对新的过程审核是否有新问题,继续完善,直到没有任何问题。
í 操作方法
步骤1
让用户从对话框输入一个值,并对该值开平方后写入活动单元格。根据题目需求,编写以下代码:

  1. Sub 获取平方根1()
  2.     Dim Value As Long
  3.     Value = InputBox("请输入数值:", "待开方之数值", 0)
  4.     ActiveCell.Value = Sqr(Value)
  5. End Sub
复制代码

步骤2       执行以上过程,并输入100或者789、123.455等数据测试,可以发现实现了需求的功能。然而如果用户在对话框上单击“取消”按钮,那么程序会出错。修改代码如下:

  1. Sub 获取平方根2()    '解决单击“取消”按钮问题
  2.     Dim Value As Variant
  3.     Value = InputBox("请输入数值:", "待开方之数值", 0)
  4.     If Len(Value) = 0 Then Exit Sub
  5.     ActiveCell.Value = Sqr(Value)
  6. End Sub
复制代码

步骤3       再执行程序验证,单击“取消”按钮后程序会自动退出,具有了防错功能。然而输入一个负数,程序仍然会出错。继续改进代码:

  1. Sub 获取平方根3()    '解决负数问题
  2.     Dim Value
  3.     Value = InputBox("请输入数值:", "待开方之数值", 0)
  4.     If Len(Value) = 0 Then Exit Sub
  5.     If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
  6. End Sub
复制代码

步骤4       当输入负数后,程序会提示用户,然后退出。但如果用户输入文本,程序仍然会出错,所以再次对代码做优化:

  1. Sub 获取平方根4()    '解决文字问题
  2.     Dim Value
  3. Value = InputBox("请输入数值:", "待开方之数值", 0)
  4. If Len(Value) = 0 Then Exit Sub
  5.     If VBA.IsNumeric(Value) Then
  6.         If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
  7.     Else
  8.         MsgBox "不能输入文本", 64, "提示"
  9.     End If
  10. End Sub
复制代码

步骤5       如果输入文本,程序具有了识别并警告用户的功能。然而,活动表是图表时,执行程序仍然会出错。完善的程序需要处理所有意外,那么程序可以做如下改进:

  1. Sub 获取平方根5()    '解决图表问题
  2.     Dim Value
  3.     If TypeName(ActiveSheet) = "Chart" Then MsgBox "不要选择图表": Exit Sub
  4. Value = InputBox("请输入数值:", "待开方之数值", 0)
  5. If Len(Value) = 0 Then Exit Sub
  6.     If VBA.IsNumeric(Value) Then
  7.         If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
  8.     Else
  9.         MsgBox "不能输入文本", 64, "提示"
  10.     End If
  11. End Sub
复制代码

步骤6       如果工作表被保护状态下执行以上程序仍然会出错,继续完善代码:

  1. Sub 获取平方根6()    '解决工作表保护问题
  2.     Dim Value
  3.     If TypeName(ActiveSheet) = "Chart" Then MsgBox "不要选择图表": Exit Sub
  4.     If ActiveSheet.ProtectContents Then MsgBox "工作表已保护": Exit Sub
  5. Value = InputBox("请输入数值:", "待开方之数值", 0)
  6. If Len(Value) = 0 Then Exit Sub
  7.     If VBA.IsNumeric(Value) Then
  8.         If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
  9.     Else
  10.         MsgBox "不能输入文本", 64, "提示"
  11.     End If
  12. End Sub
复制代码

步骤7       如果活动单元格处于数组区域之间,程序仍然会产生错误,所以最后将代码优化为:

  1. Sub 获取平方根7()    '解决数组区域问题
  2.     Dim Value
  3.     If TypeName(ActiveSheet) = "Chart" Then MsgBox "不要选择图表": Exit Sub
  4.     If ActiveSheet.ProtectContents Then MsgBox "工作表已保护": Exit Sub
  5. Value = InputBox("请输入数值:", "待开方之数值", 0)
  6. If Len(Value) = 0 Then Exit Sub
  7.     If VBA.IsNumeric(Value) Then
  8.         On Error Resume Next
  9.         Debug.Print ActiveCell.CurrentArray
  10.         If Err = 0 Then MsgBox "请不要选择数组区域": Exit Sub
  11.         If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
  12.     Else
  13.         MsgBox "不能输入文本", 64, "提示"
  14.     End If
  15. End Sub
复制代码

=============================
上摘自《EXCEL2010编程与实践》

点评

 虽然我对Excel2010已经不陌生了,但打开本书,仍有一种全新的感觉。本书一改Office帮助的那种“菜单式说教”,而是将日常运用过程中经常会遇到的疑难问题一一列出并详加说明解决方案,有的甚至还列出多项解决方案,   发表于 2011-1-13 01:25

评分

参与人数 1 +3 收起 理由
xdwy81129 + 3 介绍好书,学习了。 复制老师的点评过来供.

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-1-12 16:10 | 显示全部楼层
妖言:

单元格是一个一个累起来滴,代码一一点一点爬出来滴……
回复

使用道具 举报

发表于 2011-1-12 16:23 | 显示全部楼层
查错的思路基本能懂,但VBA真的要在明年好好学习学习
回复

使用道具 举报

发表于 2011-1-12 17:00 | 显示全部楼层
很想学VBA,但是不明白这个意思
回复

使用道具 举报

发表于 2011-1-12 21:35 | 显示全部楼层
跟着小妖老师学习EXCEL
回复

使用道具 举报

发表于 2011-1-12 22:05 | 显示全部楼层
学习
回复

使用道具 举报

发表于 2011-1-12 22:16 | 显示全部楼层
想学VBA,可是不懂           
回复

使用道具 举报

发表于 2011-1-12 22:16 | 显示全部楼层
方小妖呀,这书在那买的               
回复

使用道具 举报

发表于 2011-1-12 23:26 | 显示全部楼层
学习VBA代码了,努力
回复

使用道具 举报

发表于 2011-1-13 00:31 | 显示全部楼层
谢谢小妖老师的分享诶~~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-1 20:41 , Processed in 0.309974 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表