ET疑难千寻千解丛书之EXCEL2010编程与实践 罗刚君 章兰新 黄朝阳 编著
疑难7
如何开发完善的程序 编写代码解决一个工作问题是很简单的,但是如何让程序完善,可以适应所有环境,且通用、兼容、可防错,这是一门相当复杂的学问。那么如何开发一个完善的程序,程序开发常会有什么错误及如何防范呢? è 解决方案 通过常规思路开发一段程序完成基本需求;然后查找存在的问题并进行完善;再对新的过程审核是否有新问题,继续完善,直到没有任何问题。 í 操作方法 步骤1
让用户从对话框输入一个值,并对该值开平方后写入活动单元格。根据题目需求,编写以下代码:
- Sub 获取平方根1()
- Dim Value As Long
- Value = InputBox("请输入数值:", "待开方之数值", 0)
- ActiveCell.Value = Sqr(Value)
- End Sub
复制代码
步骤2 执行以上过程,并输入100或者789、123.455等数据测试,可以发现实现了需求的功能。然而如果用户在对话框上单击“取消”按钮,那么程序会出错。修改代码如下:
- Sub 获取平方根2() '解决单击“取消”按钮问题
- Dim Value As Variant
- Value = InputBox("请输入数值:", "待开方之数值", 0)
- If Len(Value) = 0 Then Exit Sub
- ActiveCell.Value = Sqr(Value)
- End Sub
复制代码
步骤3 再执行程序验证,单击“取消”按钮后程序会自动退出,具有了防错功能。然而输入一个负数,程序仍然会出错。继续改进代码:
- Sub 获取平方根3() '解决负数问题
- Dim Value
- Value = InputBox("请输入数值:", "待开方之数值", 0)
- If Len(Value) = 0 Then Exit Sub
- If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
- End Sub
复制代码
步骤4 当输入负数后,程序会提示用户,然后退出。但如果用户输入文本,程序仍然会出错,所以再次对代码做优化:
- Sub 获取平方根4() '解决文字问题
- Dim Value
- Value = InputBox("请输入数值:", "待开方之数值", 0)
- If Len(Value) = 0 Then Exit Sub
- If VBA.IsNumeric(Value) Then
- If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
- Else
- MsgBox "不能输入文本", 64, "提示"
- End If
- End Sub
复制代码
步骤5 如果输入文本,程序具有了识别并警告用户的功能。然而,活动表是图表时,执行程序仍然会出错。完善的程序需要处理所有意外,那么程序可以做如下改进:
- Sub 获取平方根5() '解决图表问题
- Dim Value
- If TypeName(ActiveSheet) = "Chart" Then MsgBox "不要选择图表": Exit Sub
- Value = InputBox("请输入数值:", "待开方之数值", 0)
- If Len(Value) = 0 Then Exit Sub
- If VBA.IsNumeric(Value) Then
- If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
- Else
- MsgBox "不能输入文本", 64, "提示"
- End If
- End Sub
复制代码
步骤6 如果工作表被保护状态下执行以上程序仍然会出错,继续完善代码:
- Sub 获取平方根6() '解决工作表保护问题
- Dim Value
- If TypeName(ActiveSheet) = "Chart" Then MsgBox "不要选择图表": Exit Sub
- If ActiveSheet.ProtectContents Then MsgBox "工作表已保护": Exit Sub
- Value = InputBox("请输入数值:", "待开方之数值", 0)
- If Len(Value) = 0 Then Exit Sub
- If VBA.IsNumeric(Value) Then
- If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
- Else
- MsgBox "不能输入文本", 64, "提示"
- End If
- End Sub
复制代码
步骤7 如果活动单元格处于数组区域之间,程序仍然会产生错误,所以最后将代码优化为:
- Sub 获取平方根7() '解决数组区域问题
- Dim Value
- If TypeName(ActiveSheet) = "Chart" Then MsgBox "不要选择图表": Exit Sub
- If ActiveSheet.ProtectContents Then MsgBox "工作表已保护": Exit Sub
- Value = InputBox("请输入数值:", "待开方之数值", 0)
- If Len(Value) = 0 Then Exit Sub
- If VBA.IsNumeric(Value) Then
- On Error Resume Next
- Debug.Print ActiveCell.CurrentArray
- If Err = 0 Then MsgBox "请不要选择数组区域": Exit Sub
- If Not Value < 0 Then ActiveCell.Value = Sqr(Value) Else MsgBox "不能小于0"
- Else
- MsgBox "不能输入文本", 64, "提示"
- End If
- End Sub
复制代码
============================= 以上摘自《EXCEL2010编程与实践》 |