【问题标题】:Excel VBA .find issueExcel VBA .find 问题
【发布时间】:2014-04-22 08:33:47
【问题描述】:

我是这个论坛的新成员,但已经针对这个特定问题进行了一些搜索。我还没有找到任何东西。

我需要一个VBA 脚本,它在第一个工作簿wb1 中搜索位于单元格I7 中的值,并将该条目引用到名为“代码”的工作表中的列A:A在另一个工作簿wb2 中,如果它在A:A 列的单元格I7 中找到值,它将把文本“找到值”放入单元格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

【问题讨论】:

  • 不完全是一个论坛——一种关于类固醇的论坛!
  • 我不明白为什么您发布的代码没有 --> 错误。您永远不会将 wb1 设置为任何东西;您正在将工作表对象 (SH1) 设置为一个范围(应该 --> 类型不匹配)。另外,请注意 Range("I7") 就足够了;不需要 Range("I7:I7")。

标签: vba excel


【解决方案1】:

正如 Ron 所说,您的声明和实例化需要一些修改。你在哪里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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多