我是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
当我运行此代码时,出现以下错误:
错误:需要对象:'找到'
我确信这里有一些显而易见的东西,但是我已经旋转了很长一段时间,并希望有人可以提供一些反馈。非常感谢任何帮助!
答案 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