Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

谁能帮我简化一下代码

不务实  发表于:2009-10-26 09:31:29  
复制

我对On Error GoTo Err_xxx_Click的代码还没理解,下段代码每个条件的错误提示不一样,我这样写好像太复杂重复了,请指教一下,

 

 

 

Private Sub 确定_Click()

Select Case STR1

Case 1

On Error GoTo Err_xxx_Click
 If IsNull(Me.账套号) Then MsgBox "请填写账套号": Exit Sub
   
    FileCopy CurrentProject.Path & "\原", Me.路径 & Me.账套号 & ".mdb"
    MsgBox "建账成功!"
   
Exit_xxx_Click:
    Exit Sub
Err_xxx_Click:
    MsgBox "建账失败"
    Resume Exit_xxx_Click
   


Case 2

Dim Stra As String
Dim Strb As String
Stra = DLookup("路径", "账套", "账套号 ='" & Me.选择账套 & "'")
Strb = DLookup("文件名", "账套", "账套号 ='" & Me.选择账套 & "'")

 

On Error GoTo Err_zzz_Click
 If IsNull(Me.选择账套) Then MsgBox "请选择账套": Exit Sub
 
    FileCopy Stra & Strb, Me.路径 & Me.选择账套 & ".mdb"
  
    MsgBox "备份成功!"
   
Exit_zzz_Click:
    Exit Sub
Err_zzz_Click:
    MsgBox "备份失败"
    Resume Exit_zzz_Click

 

Case 3
On Error GoTo Err_yyy_Click
 If IsNull(Me.账套号) Then MsgBox "请填写账套号": Exit Sub
   
    FileCopy Me.路径2, Me.路径 & Me.账套号 & ".mdb"
    MsgBox "导入成功!"
   
Exit_yyy_Click:
    Exit Sub
Err_yyy_Click:
    MsgBox "导入失败"
    Resume Exit_yyy_Click
 

 
Case 4


On Error GoTo Err_bbb_Click

Kill "D:\temp\aaa.accdb"
    MsgBox "删除成功"
Exit_bbb_Click:
    Exit Sub
Err_bbb_Click:
    MsgBox "删除不成功"
    Resume Exit_bbb_Click

 

Case Else
End Select

End Sub

 

 

Top
芊芊 发表于:2009-10-26 10:57:27

举例说明一下:

Case 4

On Error GoTo Err_bbb_Click

Kill "D:\temp\aaa.accdb"
    MsgBox "删除成功"
Exit_bbb_Click:
    Exit Sub
Err_bbb_Click:
    MsgBox "删除不成功"
    Resume Exit_bbb_Click

上面的语句就是要删除D:\temp\aaa.accdb文件,

如果D:\temp\aaa.accdb文件不存在,

语句Kill "D:\temp\aaa.accdb"就无法执行,就会报错。

报错了就On Error GoTo Err_bbb_Click

所以就告诉你MsgBox "删除不成功",后面的语句就不能执行,

所以就Resume Exit_bbb_Click退出过程



trynew 发表于:2009-10-26 12:24:22

Private Sub 确定_Click()

Dim strMsg As String

On Error GoTo Err_xxx_Click
Select Case STR1

Case 1

 If IsNull(Me.账套号) Then MsgBox "请填写账套号": Exit Sub
    strMsg= "建账失败!"
    FileCopy CurrentProject.Path & "\原", Me.路径 & Me.账套号 & ".mdb"

    MsgBox "建账成功!"

Case 2

Dim Stra As String
Dim Strb As String
Stra = DLookup("路径", "账套", "账套号 ='" & Me.选择账套 & "'")
Strb = DLookup("文件名", "账套", "账套号 ='" & Me.选择账套 & "'")

 

    strMsg= "备份失败!"

 If IsNull(Me.选择账套) Then MsgBox "请选择账套": Exit Sub
 
    FileCopy Stra & Strb, Me.路径 & Me.选择账套 & ".mdb"
  
    MsgBox "备份成功!"
   

Case 3
 If IsNull(Me.账套号) Then MsgBox "请填写账套号": Exit Sub
    strMsg= "导入失败!"
    
    FileCopy Me.路径2, Me.路径 & Me.账套号 & ".mdb"
    MsgBox "导入成功!"
    
 


Case 4

    strMsg= "删除失败!"

Kill "D:\temp\aaa.accdb"
    MsgBox "删除成功"

Case Else
End Select

Exit_xxx_Click:
    Exit Sub
Err_xxx_Click:
    MsgBox strMsg
    Resume Exit_xxx_Click

End Sub

 

这样做是把出错处理语句放到select语句外面去了,那当然要在操作语句前加一句出错原因(赋值),否则就要根据Err对象的返回值进行判断了。

在出错处理语句中,冒号前面的是标号,也就是转向语句Goto和Resume要转到哪里而已,本身是不影响代码的执行和顺序的。

Resume与Goto的区别是除了转向,还顺便重置了一下Err对象,恢复程序的执行而已。

 

举例说明一下:

Case 4

'如果有语句执行不了,就转到Err_bbb_Click:后面的语句机型执行,并在Err对象中写入出错及出错原因

On Error GoTo Err_bbb_Click

Kill "D:\temp\aaa.accdb"
    MsgBox "删除成功"
Exit_bbb_Click:

    Exit Sub
'如果没有语句出错,执行到这里,程序就退出结束了,后面的语句就不行执行了。

Err_bbb_Click:
    MsgBox "删除不成功"

'上面是对出错进行提示或处理,后面一句是对出错对象进行重置并转向继续执行(这里是转到程序结束处)

'如果重来不对出错对象进行检查,后面的语句是可以省略的
    Resume Exit_bbb_Click

 

当然如果要忽略出错,不出提示的话,可以在第一句代码前加一句,其他就不用管了:

On Error Resume Next



总记录:2篇  页次:1/1 9 1 :