Excel精英培训网

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

[已解决]on error goto line 的问题

[复制链接]
发表于 2012-1-6 20:38 | 显示全部楼层 |阅读模式
On Error GoTo line
For i = 1 To UBound(arr1)
With Worksheets
Set sh = .Add(after:=Sheets(.Count))
sh.Name = arr1(i, 1)
End With
Next i
line:
    MsgBox "工作簿中已有工作表,不能重复添加!"
    Worksheets(Worksheets.Count).Delete
是这样的,我根据数组arr1来添加表格,通过on error goto line 语句检查是否添加了同工作表名的工作表,但是事实是我添加的没有与工作表同名的,但还是会运行到line,这里并把我最后添加的一张工作表删除了,请问这是什么原因?该怎么解决?谢谢
最佳答案
2012-1-6 21:02
On Error Resume Next
For i = 1 To UBound(arr1)
With Worksheets
Set sh = .Add(after:=Sheets(.Count))
sh.Name = arr1(i, 1)
    If Err.Number <> 0 Then
        MsgBox "工作簿中已有工作表,不能重复添加!"
        Worksheets(Worksheets.Count).Delete
        Err.Number = 0
    End If
End With
Next i
发表于 2012-1-6 20:44 | 显示全部楼层
On Error GoTo line
For i = 1 To UBound(arr1)
With Worksheets
Set sh = .Add(after:=Sheets(.Count))
sh.Name = arr1(i, 1)
End With
Next i
EXIT SUB
line:
    MsgBox "工作簿中已有工作表,不能重复添加!"
    Worksheets(Worksheets.Count).Delete
回复

使用道具 举报

发表于 2012-1-6 21:02 | 显示全部楼层    本楼为最佳答案   
On Error Resume Next
For i = 1 To UBound(arr1)
With Worksheets
Set sh = .Add(after:=Sheets(.Count))
sh.Name = arr1(i, 1)
    If Err.Number <> 0 Then
        MsgBox "工作簿中已有工作表,不能重复添加!"
        Worksheets(Worksheets.Count).Delete
        Err.Number = 0
    End If
End With
Next i
回复

使用道具 举报

发表于 2012-1-6 21:51 | 显示全部楼层
On Error Resume Next
For i = 1 To UBound(arr1)
With Worksheets
Set sh = sheets(arr1(i,1))  '先判断工作表是否存在
if err.number = 9 then  '如果不存在,那么再添加,这样就不用add一个多余表,然后后面又delete多余表
   set sh = .Add(after:=Sheets(.Count))
   sh.Name = arr1(i, 1)
end if   
End With
Next i
回复

使用道具 举报

 楼主| 发表于 2012-1-7 14:25 | 显示全部楼层
FF7 发表于 2012-1-6 21:51
On Error Resume Next
For i = 1 To UBound(arr1)
With Worksheets

谢谢,我问的是为什么上面没有重复,下面却会运行到line那里去呢

点评

能上传个附件吗?  发表于 2012-1-7 14:29
回复

使用道具 举报

发表于 2012-1-7 14:27 | 显示全部楼层
jiangslly 发表于 2012-1-7 14:25
谢谢,我问的是为什么上面没有重复,下面却会运行到line那里去呢

因为代码是自上而下运行的。
line:前面没有语句终止代码运行,所以就会一直运行到结束。

所以
exit sub   '这里必须加入退出代码运行语句。
Line:
这个是正解
回复

使用道具 举报

发表于 2012-1-9 16:54 | 显示全部楼层

原因很简单,因为你的程序在next i 之前的代码没有exit sub这个语句
所以执行完循环语句后,就会运行后面两句,而这个运行不是“On Error GoTo line“语句造成的。
而是程序从上至下运行到这里的。

问题如何解决前面都说了,我就不写了。


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 01:17 , Processed in 0.377477 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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