2016-07-15 5 views
2

안녕하세요! 아래 코드를 실행하려고하는데 오류 1004 : WorksheetFunction 클래스의 Match 속성을 가져올 수 없습니다.. MATCH() 함수는 # N/A을 반환하므로 INDEX 변수에 할당 할 필요가 없습니다. (또한 오류가 발생할 수 있다고 생각합니다.). 이 가능성을 설명하기 위해 코드를 수정하는 방법에 대해 조언 할 수 있습니까?VBA의 MATCH() 함수

Sub Debugging() 

Workbooks("Problem.xls").Worksheets(1).Activate 

Cash_Rows = 5 
Share_Rows = 6 

If Cash_Rows <= Share_Rows Then 

Range("A1:A" & Cash_Rows).Select 
With Selection.Interior 
    .ThemeColor = xlThemeColorAccent6 
    .TintAndShade = 0.399975585192419 
End With 

Count_Cash = Application.WorksheetFunction.CountIf(Range("A:A"), "L*") 

For Each cell In Range("A1:A" & Cash_Rows) 
    If CStr(cell.Value) Like "L*" Then 
    Range("A" & cell.Row & ":" & "D" & cell.Row).Interior.Color = 65535 
    Dim Index As Integer 
    Index = Application.WorksheetFunction.Match(CStr(cell.Value), Range("F2:" & "F" & Share_Rows), 0) 
    Range("F" & Index & ":" & "I" & Index).Interior.Color = 65535 
    End If 
Next 

If Count_Cash = 0 Then 
    MsgBox "You do not have any matching ID+Amount between Cash and Shares booking. It's OK!" 
Else 
    MsgBox "You have " & Count_Cash & " matching transactions. Check them!" 
End If 

Else 

MsgBox "Do not worry. Be happy!" 

End If 

End Sub 

감사합니다.

+0

버전은 무엇? [this] (https://stackoverflow.com/questions/20028769/match-function-vba-not-working-properly?rq=1)에 따라 'Application.WorksheetFunction.Match' 대신'Application.Match'를 시도해 볼 수 있습니다. . ** PS ** 사이트에 오신 것을 환영합니다! 품질 좋은 답변을 얻을 수있는 질문에 대한 자세한 내용은 [둘러보기] (https://stackoverflow.com/tour)를 확인하십시오. – cxw

+1

답장을 보내 주셔서 감사합니다. 저는 Excel 2010을 사용하고 있습니다. 귀하의 팁이 실제로 도움이되었지만, "인덱스"변수의 선언을 변경할 때만 - Integer 유형에서 Variant로 변경되었습니다 (그렇지 않으면 _Type Mismatch_ 오류가 발생 함). 나는 내 질문에 언급 한 잠재적 인 문제와 관련이 있다고 생각한다. - 어떤 점에서 MATCH() 함수가 숫자 대신 "# N/A"를 반환하면 명시 적으로 인덱스가 정수일 수 있다고 말했기 때문에 오류가 발생한다. 남아있는 문제는 MATCH()에서 "# N/A"를 가져올 가능성을 처리하지 않으면이 코드가 더 이상 실행되지 않는다는 것입니다. 그래서 나는 지금 그것에 대해 무엇을해야한다고 생각할 것입니다. –

+0

CStr (cell.value) 대신 셀을 사용할 수 있다고 생각합니다. 이상하게 생각합니다.이 함수는 내가 사용하는 함수이며 잘 작동합니다. 나는 보통 수식에서 먼저 Excel로 작업 한 다음 그 수식을 나중에 VBA 코드로 변경합니다. – Lowpar

답변

1
  1. Application.WorksheetFunction.Match 대신 Application.Match을 사용하십시오. 이 오류는 Match 자체가 누락되었음을 나타내며 Match의 인수는 문제가되지 않습니다. (그러나 Match이 누락 된 이유는 확실하지 않습니다.)

  2. 귀하의 의견에 언급 한대로 Integer 대신 Dim Index as Variant입니다. 경기가 실패 할 경우 (덧붙여, use Long instead of Integer는 16 비트 전용 API 함수를 호출하지 않는 한.) this answer

  3. , Application.Match 오류 변종 (#N/A)를 반환합니다. 그 테스트하려면 IsError 사용 : 엑셀의

    If Not IsError(Index) Then 
        Dim idxstr as String: idxstr = CStr(Index) 
         ' ^^ Make sure you don't get surprised by how the Variant converts 
        Range("F" & idxstr & ":" & "I" & idxstr).Interior.Color = 65535 
    End If 
    
+0

https://msdn.microsoft.com/en-us/library/office/ff835873.aspx 식 .Match (Arg1, Arg2, Arg3) expression WorksheetFunction 개체를 나타내는 변수입니다. 그것은 application.worksheetfunction.match()가되어야합니다 – Gareth

+0

@ 가레스 나는 또한 그것을 보았습니다.하지만 [OP는 말한다] (http://stackoverflow.com/questions/38398310/match-function-in-vba/38399444? noredirect = 1 # comment64206499_38398310)'Application.Match'가 효과가있었습니다. 링크 된 답변도 참조하십시오. 나는 2010 년이 없기 때문에 거기에서 테스트 할 수 없었다. 내 2013 설치에서 'Application.Match'는 개체 브라우저에 나타나지 않지만 존재합니다! – cxw

+0

대단히 감사합니다! 이것이 바로 제가 찾던 것입니다. –