2013-05-09 54 views
0

我遇到以下问题。如果值存在于列B中,我想使用匹配函数来检查(对于列A中的每个值都不是空白),如果是这样,我希望它将值发布到sheet2的相同单元格目标中。一旦达到与“匹配”的线路,即“对象不支持此属性或方法”,我会收到错误。以防万一我选择编码的方式令人困惑,我希望它的功能是=match(cl.address; B; 0)。我的代码是VBA中的工作表功能

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 

回答

1
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 
+0

你。是。一个。传说。 。 。 。谢谢一堆 – 2013-05-09 10:54:49

+0

不客气,我很高兴它帮助! – dee 2013-05-09 11:13:48

2

=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, ...)将试图找到存储为字符串的B列中的cl的地址,而不是cl的值。如果要查找该值,请使用Match(cl.value, ...)