For next 和 Onerror
时间:2011-08-05
来源:互联网
各位朋友,
我想根据表中A列是否有ACT_LOC和ADJ_LOC进行不同的操作。
如果两者都有,就做语句1;
如果只有其中一种,就去下一个sheet。
但是For循环第一次好用,第二次就进行不下去了,不知道是为什么,提示是“Object variable or With block variable not set"
不知道怎么办,请指教。多谢
其中,ACT = Range("A:A").Find("ACT_LOC").Row是为了判断第一个ACT_LOC的行数。
Sub ErrorCase()
For i = 1 To 3
On Error GoTo ErrorHandler
Dim ACT%
Dim ADJ%
ACT = Range("A:A").Find("ACT_LOC").Row
ADJ = Range("A:A").Find("ADJ_LOC").Row
'语句1
Exit Sub
ErrorHandler:
'go to next sheet
Next
End Sub
Help.zip(10.39 KB)
我想根据表中A列是否有ACT_LOC和ADJ_LOC进行不同的操作。
如果两者都有,就做语句1;
如果只有其中一种,就去下一个sheet。
但是For循环第一次好用,第二次就进行不下去了,不知道是为什么,提示是“Object variable or With block variable not set"
不知道怎么办,请指教。多谢
其中,ACT = Range("A:A").Find("ACT_LOC").Row是为了判断第一个ACT_LOC的行数。
Sub ErrorCase()
For i = 1 To 3
On Error GoTo ErrorHandler
Dim ACT%
Dim ADJ%
ACT = Range("A:A").Find("ACT_LOC").Row
ADJ = Range("A:A").Find("ADJ_LOC").Row
'语句1
Exit Sub
ErrorHandler:
'go to next sheet
Next
End Sub
附件

2011-8-5 00:16, 下载次数: 11
For循环和Onerror
作者: luckfreeman 发布时间: 2011-08-05
复制内容到剪贴板
Dim sht As Worksheet
Dim ACT, ADJ
On Error GoTo ErrorHandler
For Each sht In Sheets
Set ACT = sht.Range("A:A").Find("ACT_LOC"): If Not ACT Is Nothing Then a = ACT.Row
Set ADJ = sht.Range("A:A").Find("ADJ_LOC"): If Not ADJ Is Nothing Then b = ADJ.Row
'语句1
Next
Exit Sub
ErrorHandler:
MsgBox "aa"
'go to next sheet
End Sub
代码:
Sub ErrorCase()Dim sht As Worksheet
Dim ACT, ADJ
On Error GoTo ErrorHandler
For Each sht In Sheets
Set ACT = sht.Range("A:A").Find("ACT_LOC"): If Not ACT Is Nothing Then a = ACT.Row
Set ADJ = sht.Range("A:A").Find("ADJ_LOC"): If Not ADJ Is Nothing Then b = ADJ.Row
'语句1
Next
Exit Sub
ErrorHandler:
MsgBox "aa"
'go to next sheet
End Sub
作者: 蓝桥玄霜 发布时间: 2011-08-05
谢谢蓝桥玄霜的改动,学习了。
其中有 个问题不太明白,还想问下,麻烦了。 多谢
1. 假设一共有4个sheets, 只要在后3个sheets中做for循环, 第一个sheet不用,有这样的语句,能在 For Each sht In Sheets 后面加语句排除第一个sheet吗?
2. Set ACT = sht.Range("A:A").Find("ACT_LOC"): If Not ACT Is Nothing Then a = ACT.Row
这行set变量之后加 “:”从未用过,能在讲解下吗?
其中有 个问题不太明白,还想问下,麻烦了。 多谢
1. 假设一共有4个sheets, 只要在后3个sheets中做for循环, 第一个sheet不用,有这样的语句,能在 For Each sht In Sheets 后面加语句排除第一个sheet吗?
2. Set ACT = sht.Range("A:A").Find("ACT_LOC"): If Not ACT Is Nothing Then a = ACT.Row
这行set变量之后加 “:”从未用过,能在讲解下吗?
作者: luckfreeman 发布时间: 2011-08-05
在您的基础上,因为刚才用onerror没成功,这次我没用的if.
我想要的结果是如果只有ACT或者ADJ, 就不用做任何动作;如果两者都有,就把他们分开,加一行标题,下移2行。
下面的macro可以实现,麻烦帮我看看能不能简化下,或者用on error做成,多谢多谢。
Sub Anotherway()
Dim Mbook As Workbook
Set Mbook = ActiveWorkbook
Dim isheet%, ACT, ADJ, a%, b%
For isheet = 2 To Mbook.Worksheets.Count
Mbook.Worksheets(isheet).Select
Set ACT = Sheets(isheet).Range("A:A").Find("ACT_LOC"): If Not ACT Is Nothing Then a = ACT.Row
Set ADJ = Sheets(isheet).Range("A:A").Find("ADJ_LOC"): If Not ADJ Is Nothing Then b = ADJ.Row
If a * b <> 0 Then
Rows("1:1").Select
Selection.Copy
Rows(b).Select
Selection.Insert Shift:=xlDown
Range(Rows(b), Rows(b + 1)).Select
Selection.Insert Shift:=xlDown
Range("a1").Select
End If
a = 0 'set a and b to Zero
b = 0
Next
End Sub
我想要的结果是如果只有ACT或者ADJ, 就不用做任何动作;如果两者都有,就把他们分开,加一行标题,下移2行。
下面的macro可以实现,麻烦帮我看看能不能简化下,或者用on error做成,多谢多谢。
Sub Anotherway()
Dim Mbook As Workbook
Set Mbook = ActiveWorkbook
Dim isheet%, ACT, ADJ, a%, b%
For isheet = 2 To Mbook.Worksheets.Count
Mbook.Worksheets(isheet).Select
Set ACT = Sheets(isheet).Range("A:A").Find("ACT_LOC"): If Not ACT Is Nothing Then a = ACT.Row
Set ADJ = Sheets(isheet).Range("A:A").Find("ADJ_LOC"): If Not ADJ Is Nothing Then b = ADJ.Row
If a * b <> 0 Then
Rows("1:1").Select
Selection.Copy
Rows(b).Select
Selection.Insert Shift:=xlDown
Range(Rows(b), Rows(b + 1)).Select
Selection.Insert Shift:=xlDown
Range("a1").Select
End If
a = 0 'set a and b to Zero
b = 0
Next
End Sub
作者: luckfreeman 发布时间: 2011-08-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28