首页 文章

Excel VBA .find问题

提问于
浏览
0

我是这个论坛的新成员,但已经做了一些搜索这个特殊问题 . 我还没找到任何东西 .

我需要一个 VBA 脚本,它在第一个工作簿 wb1 中搜索位于单元格 I7 中的值,并在另一个工作簿 wb2 中的一个名为"Codes"的工作表中引用该条目 A:A ,如果它在Cell I7 中找到该值在 A:A 列中,它将文本"Value Found"放入Cell I7 . 如果它没有在列范围内找到该值,它将原始工作表中的旧值复制并粘贴到新工作表中 .

Excel似乎正在执行代码,但我得到的问题是,如果值不在引用的列中,代码似乎没有提取它,因此代码只是放置“值发现“无论是否在引用的列中找到值,都进入目标单元格,我在这里遗漏了什么?

Dim wb1 as Workbook, wb2 as Workbook, 
Dim Sh1 as Worksheet
Dim WBS as Range

Set Sh1 = wb1.Sheets("Codes").Range("A:A")
Set WBS = Sh1.Columns(1).Find(What:=wb2.Sheets("Summary").Range("I7:I7").Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext,     MatchCase:=False)
If WBS Is Nothing Then
wb1.Sheets("Summary").Range("I7:I7").Copy
wb2.Sheets("Summary").Range("I7:I7").PasteSpecial Paste:=xlPasteAll
Else
wb2.Sheets("Summary").Range("I7:I7").Value = "'Value Found"
End If

1 回答

  • 0

    正如罗恩评论你的声明和实例需要一些修改 . 你的代码在哪里 Set wb1和wb2?

    这个简化版本工作正常:

    Sub simplified()
    
    Dim rn1 As Range
    Dim WBS As Range
    
    Set rn1 = Range("A:A")
    Set WBS = rn1.Find( _
            What:=Range("I7").Value, _
            LookIn:=xlValues, _
            LookAt:=xlWhole, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False)
    
    If WBS Is Nothing Then
        Range("I7").Copy
        Range("J7").PasteSpecial Paste:= Excel.xlValues
    Else
        Range("J7").Value = "'Value Found"
    End If
    
    End Sub
    

    结果简化为单个工作簿中的一个工作表:

    enter image description here

相关问题