VBA中的WorksheetFunction

我遇到以下问题。 我想使用匹配函数来检查(如果A列中的每个值都不是空白的),如果这个值存在于列B中,并且我希望它将值发送到同一单元格目标中的sheet2。 一旦达到与“匹配”的线路,即“对象不支持这个属性或方法”,我会得到一个错误。 只是以防万一我select编码的方式混淆了我希望它做的function=match(cl.address; B; 0) 。 我的代码是

 Sub UseFunction() Dim myRange As Range For Each cl In Worksheets("sheet1").Range("A:A") If cl.Value <> "" Then If cl.WorksheetFunction.Match(cl.Address, B, 0) Then Worksheets("sheet2").cl.Value = Worksheets("sheet1").cl.Value End If End If Next cl End Sub 

 Private Const SOURCE_SHEET = "sheet1" Private Const TARGET_SHEET = "sheet2" Sub test() Dim cl As Range, matchResult As Double Dim source As Worksheet Dim target As Worksheet Set source = Worksheets(SOURCE_SHEET) Set target = Worksheets(TARGET_SHEET) On Error Resume Next With source For Each cl In .UsedRange.Columns("A").Cells If cl.Value <> "" Then matchResult = 0 matchResult = WorksheetFunction.Match(cl.Value, .UsedRange.Columns("B"), 0) If (matchResult > 0) Then target.Cells(cl.Row, cl.Column).Value = cl.Value End If Next cl End With On Error GoTo 0 End Sub 

=match(cl.address; B; 0)不是一个有效的公式。 如果你打算说“B列”,那就是B:B

cl.WorksheetFunction.Match应该是Application.WorksheetFunction.Match

对于第二个参数,您需要Worksheets("sheet1").Columns(2)Worksheets("sheet1").Range("B:B")

Match(cl.address, ...)将尝试查找存储为string的列B中cl的地址,而不是cl的值。 如果你想find值,使用Match(cl.value, ...)