VBScript从另一个工作簿中搜索Excel工作簿以获取价值

时间:2015-09-09 15:58:11

标签: excel vba vbscript

我是VB脚本的新手,所以请耐心等待!我正在尝试创建一个使用来自两个不同excel工作簿的工作表的脚本。它打开第一个工作表并迭代指定的范围。我希望它然后获取该范围内每个单元格的值并搜索第二个工作表(在不同的工作簿中)并搜索在第一个工作表中找到的值,如果找到该值,则返回该地址它被发现的细胞。例如:

Worksheet1
╔══════╦═════╗
║ Name ║ Age ║
╠══════╬═════╣
║ Matt ║  22 ║
║ Jeff ║  13 ║
╚══════╩═════╝

Worksheet2
╔═══════╦════════════╗
║ Name  ║    DOB     ║
╠═══════╬════════════╣
║ Dave  ║ 09/12/2001 ║
║ Frank ║ 01/25/1992 ║
║ Jeff  ║ 10/10/2013 ║
╚═══════╩════════════╝

因此脚本会输出:A4 因为它找到了第二个工作表中第一个工作表的指定范围(A2:A3)中的一个值,并返回该单元格的位置。

这是我的代码:

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

Dim val

Set objWorkbook = objExcel.Workbooks.Open("C:\Users\username\file.xlsx")
Set objWorksheet = objWorkbook.Worksheets("Sheet1")

Set objWorkbook2 = objExcel.Workbooks.Open("C:\Users\username\file2.xlsx")
Set objWorksheet2 = objWorkbook2.Worksheets("Sheet1")


For Each c In objworksheet.Range("A2:A3").Cells
    val = c.value
    Set objRange = objWorksheet2.UsedRange
    Set found = objRange.Find(val)
    Wscript.Echo found.AddressLocal(False,False)
Next

当我运行此代码时,出现以下错误:

  

错误:需要对象:'找到'

我确信这里有一些显而易见的东西,但是我已经旋转了很长一段时间,并希望有人可以提供一些反馈。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

Find()函数成功返回Range对象,否则返回Nothing。因此,在尝试访问其属性和方法之前,需要测试返回值以确保它是Range对象。

For Each c In objworksheet.Range("A2:A3").Cells
    val = c.value
    Set objRange = objWorksheet2.UsedRange
    Set found = objRange.Find(val)

    ' Test for success!
    If Not found Is Nothing Then
        Wscript.Echo found.AddressLocal(False,False)
    End If
Next
相关问题