Excel精英培训网

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

[已解决]使用fine查找未找到该怎么样跳出

[复制链接]
发表于 2015-7-30 18:37 | 显示全部楼层 |阅读模式
在一个excel表格中有两个工作薄在一个工作薄中数据在第二个表格里查找数据对应得其他数据,如果在第二表格里面没有这个数据,下面的宏就会报错

Sub 查找()
Dim P_N, r, l As String
Dim rng As Range
l = Worksheets("Sale BOM").Range("b65536").End(xlUp).Row
For r = 2 To l
P_N = Cells(r, 5).Value
with Worksheets("ExcelBOM").Range("D:D")
n = .Find(P_N).Row
End With
With Workbooks("輸入格式")
.Worksheets("Sale BOM").Cells(r, 6) = .Worksheets("ExcelBOM").Cells(n, 5).Value
End With
Next r
End Sub
最佳答案
2015-7-30 23:48
Sub 查找()
    Dim P_N, r, l As String

    l = Worksheets("s_fine").Range("a65536").End(xlUp).Row
    For r = 1 To l

'        On Error Resume Next
        P_N = Worksheets("s_fine").Cells(r, 1).Value
        With Worksheets("data").Range("A:A")
            n = .Find(P_N).Row
        End With

        o = Worksheets("data").Cells(n, 2).Value
        Worksheets("s_fine").Cells(r, 2) = o
    Next r
End Sub





橙色部分是查找操作,是不安因素,即可能出错。
比如,当r=4时,没查找到A1004对应位置,而On Error Resume Next屏蔽了错误,导致n沿用r=3时所找的对应位置(6)。
修改如下



Sub 查找2()
    Dim P_N, r, l As String, rng, sh1, sh2

    Set sh1 = Worksheets("s_fine")
    Set sh2 = Worksheets("data")
    sh1.Columns(2).ClearContents
    l = sh1.Range("a65536").End(xlUp).Row


    For r = 1 To l
        P_N = sh1.Cells(r, 1).Value
        Set rng = sh2.Range("A:A").Find(P_N)

        '如果找的到(即没发生错误)
        If Not rng Is Nothing Then
            '才执行指定的(赋值)操作
            n = rng.Row
            o = sh2.Cells(n, 2).Value
            sh1.Cells(r, 2) = o
        End If
    Next r
End Sub



excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-7-30 21:12 | 显示全部楼层
For r = 2 To l
On Error Resume Next
P_N = Cells(r, 5).Value
回复

使用道具 举报

 楼主| 发表于 2015-7-30 22:44 | 显示全部楼层
七彩屋 发表于 2015-7-30 21:12
For r = 2 To l
On Error Resume Next
P_N = Cells(r, 5).Value

有将你说的这部分加在代码中,但是结果好像是错的,请帮忙指正。
Sub 查找()
Dim P_N, r, l As String
l = Worksheets("s_fine").Range("a65536").End(xlUp).Row
For r = 1 To l
On Error Resume Next
P_N = Worksheets("s_fine").Cells(r, 1).Value
With Worksheets("data").Range("A:A")
n = .Find(P_N).Row
End With
o = Worksheets("data").Cells(n, 2).Value
Worksheets("s_fine").Cells(r, 2) = o
Next r
End Sub

s_fine

s_fine
data.jpg

fine.zip

13.81 KB, 下载次数: 3

回复

使用道具 举报

发表于 2015-7-30 23:48 | 显示全部楼层    本楼为最佳答案   
Sub 查找()
    Dim P_N, r, l As String

    l = Worksheets("s_fine").Range("a65536").End(xlUp).Row
    For r = 1 To l

'        On Error Resume Next
        P_N = Worksheets("s_fine").Cells(r, 1).Value
        With Worksheets("data").Range("A:A")
            n = .Find(P_N).Row
        End With

        o = Worksheets("data").Cells(n, 2).Value
        Worksheets("s_fine").Cells(r, 2) = o
    Next r
End Sub





橙色部分是查找操作,是不安因素,即可能出错。
比如,当r=4时,没查找到A1004对应位置,而On Error Resume Next屏蔽了错误,导致n沿用r=3时所找的对应位置(6)。
修改如下



Sub 查找2()
    Dim P_N, r, l As String, rng, sh1, sh2

    Set sh1 = Worksheets("s_fine")
    Set sh2 = Worksheets("data")
    sh1.Columns(2).ClearContents
    l = sh1.Range("a65536").End(xlUp).Row


    For r = 1 To l
        P_N = sh1.Cells(r, 1).Value
        Set rng = sh2.Range("A:A").Find(P_N)

        '如果找的到(即没发生错误)
        If Not rng Is Nothing Then
            '才执行指定的(赋值)操作
            n = rng.Row
            o = sh2.Cells(n, 2).Value
            sh1.Cells(r, 2) = o
        End If
    Next r
End Sub



评分

参与人数 1 +1 收起 理由
kanndy + 1 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 20:14 , Processed in 0.373445 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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