VBA查找并查找粘贴值的内容

时间:2017-07-25 13:41:49

标签: excel vba excel-vba

我有这张表格,我想使用FindFindNext来搜索其他工作表BD上的值,并将其复制到我的主工作表Plan1alocacao上匹配Column 5上的单元格。

我曾经有4个带有命名范围tecnico1, tecnico2, tecnico3 and tecnico4的空格来粘贴值,代码工作正常。

它的外观如下:

enter image description here

BD表:

enter image description here

这是代码:

Sub VerifProd_Click()
    Dim FoundCell As Range, FirstAddr As String, fnd As String, i As Long

    fnd = Sheets(1).Range("alocacao").Value

    Set FoundCell = Sheets("BD").Columns(5).Find(what:=fnd, _
        After:=Sheets("BD").Cells(Rows.Count, 5), Lookat:=xlPart, _
        LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    If FoundCell Is Nothing Then Exit Sub

    Do
        i = i + 1
        Sheets("Plan1").Range("tecnico" & i).Value = FoundCell.Offset(, -3).Value
        Sheets("Plan1").Range("upps0" & i).Value = FoundCell.Offset(, -1).Value

        Set FoundCell = Sheets("BD").Columns(5).FindNext(After:=FoundCell)
    Loop Until FoundCell.Address = FirstAddr Or i >= 4
End Sub

但是,现在我意识到我需要更多字段,因为我可能会在tecnicos上插入超过4 alocacao。所以现在这就是它的样子:

enter image description here

我刚刚更改了这部分代码:

If FoundCell Is Nothing Then Exit Sub

        Do
            i = i + 1
            Sheets("Plan1").Range("tecnico" & i).Value = FoundCell.Offset(, -3).Value
            Sheets("Plan1").Range("upps0" & i).Value = FoundCell.Offset(, -1).Value

            Set FoundCell = Sheets("BD").Columns(5).FindNext(After:=FoundCell)
        Loop Until FoundCell.Address = FirstAddr Or i >= 10

所以我期待它只填充4个领域,因为我仍然只有4个匹配,但我得到了这个结果:

enter image description here

由于我是使用Find和FindNext的新手,我真的不知道我需要改变什么来填充匹配的单元格而不重复它。

任何建议都会有所帮助!也许有些东西我无法注意到。

1 个答案:

答案 0 :(得分:1)

我刚刚使用了@Luuklag的建议,现在它正在运作。

Sub VerifProd_Click()
    Dim FoundCell As Range, FirstAddr As String, fnd As String, i As Long

    fnd = Sheets(1).Range("alocacao").Value

    Set FoundCell = Sheets("BD").Columns(5).Find(what:=fnd, _
        After:=Sheets("BD").Cells(Rows.Count, 5), Lookat:=xlPart, _
        LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    If Not FoundCell Is Nothing Then
        FirstAddr = FoundCell.Address
    End If
    If FoundCell Is Nothing Then Exit Sub

    Do
        i = i + 1
        Sheets("Plan1").Range("tecnico" & i).Value = FoundCell.Offset(, -3).Value
        Sheets("Plan1").Range("upps0" & i).Value = FoundCell.Offset(, -1).Value

        Set FoundCell = Sheets("BD").Columns(5).FindNext(After:=FoundCell)
    Loop Until FoundCell.Address = FirstAddr Or i >= 10
End Sub