背景:
我有以下测试代码可以正常工作,其中H列等于B列与D列中的值
Range("H2:H17") = "=INDEX(D2:D17,MATCH(B2:B17,B2:B17,0))"
问题:
我该如何在代码中使用它来引用名为“ temp”的单独工作表来执行相同的操作。这个想法是每次代码寻找“目标”时 一个索引并匹配检查列B以等于列D中的值,因此如果值A通过,则它将变为Test1?
我尝试了以下代码,但是目标未使用任何值更新。
将目标设为变体
With Application
Target = .Index(Sheets("Temp").Range("D2:D17"), .Match(Sheets("Temp").Range("B2:B17"), Sheets("Temp").Range("B2:B17"), 0))
End With
调试显示目标的以下内容
感谢您的帮助!
答案 0 :(得分:1)
Match
是WorksheetFunction
界面的成员;您需要一个WorksheetFunction
对象实例来调用它-一个With
块可以为您保留该对象引用,因此您只需键入一次即可:
With Application.WorksheetFunction
Target = .Index(sheet.Range("D2:D17"), .Match(sheet.Range("B2:B17"), sheet.Range("B2:B17"), 0))
End With
sheet
是要使用的Worksheet
变量,或者是过程的Worksheet
参数。
尽管Match
想要成为一个单一值,但lookup_value
的第一个参数看起来有些问题:早绑定Application.WorksheetFunction.Match
方法对Variant
的内容很挑剔愿意配合使用的子类型,并会按原样抛出类型不匹配错误。
后期绑定版本(注意拼写错误!Option Explicit
不能使您摆脱后期绑定代码!)可以与range / array查找值参数一起使用,并产生一个{{1} }数组:
Variant()
确保With Application
Target = .Index(sheet.Range("D2:D17"), .Match(sheet.Range("B2:B17"), sheet.Range("B2:B17"), 0))
End With
是Target
,因为如果查找失败,则此后期绑定的Variant
将产生一个Match
值(早期绑定的版本会引发一次运行-time error)-如果您尝试分配给除Variant/Error
以外的任何内容,这将是类型不匹配错误。