2014-06-30 2 views
0

나는 현재 실행중인 함수에 대한 배열에 대해 별도의 시트에 범위를 정의하는 데 문제가 있습니다. 이 기능은 KVLOOKUP이며 here입니다. 내가 가지고있는 문제는 범위를 설정하려고 할 때입니다. Sub Searched 정의 된 범위를 허용하지 않습니다. 나는 다양한 방법으로 범위를 정의하기 위해 내가 생각할 수있는 것을 시도했다. 내가 여기서 어디로 잘못 가고 있는지 확실하지 않습니다.배열의 범위 정의 문제

기능은

Function KVLOOKUP(LookedValue As String, Matrix As Variant, Column As Integer) As Variant 

Dim Result() As Variant 
Dim i As Integer 
Dim Counter As Long 
Dim Column1 As Integer 
Column1 = Column + 1 

If IsObject(Matrix) Then Matrix = Matrix.Value 
On Error Resume Next 
Do 
    i = i + 1 
Counter = UBound(Matrix, i) 
Loop Until Err.Number <> 0 

If Counter < Column Then KVLOOKUP = CVErr(xlErrNum): Exit Function 
Counter = 0 

For i = LBound(Matrix, 1) To UBound(Matrix, 1) 
If Matrix(i, 1) = LookedValue Then 
Counter = Counter + 1 
ReDim Preserve Result(1 To Counter) 
Result(Counter) = Matrix(i, Column) & " - " & Matrix(i, Column1) 



End If 

Next i 

On Error GoTo 0 

If Counter = 0 Then 
    KVLOOKUP = CVErr(xlErrNA) 
Else 
    KVLOOKUP = Result(1) 
    For i = 2 To UBound(Result) 
     KVLOOKUP = KVLOOKUP & ", " & Result(i) 
    Next i 
End If 
End Function 

내 문제는 아래의 코드 내에 호출합니다. 세포에서 나는 KVLOOKUP과 같은 일반 함수 =KVLOOKUP(TextToSearch,'IDBHour1'!B2:E120,2)를 부를 수 있습니다. VBA 내에서 함수를 호출하여 동일한 범위를 정의하려고 시도했지만 위와 같은 범위를 정의 할 수 없었습니다. 나는 (그것이 정상적인 VLOOKUP 기능에 대해 수행 될 방법이다)이 같은 범위를 정의하려고하면 그것이 어떤 결과를 제공하지 않습니다

하위는 E_name을 정의하고 Rnge은 어떤 이유로

값 . 이것은 내가 어떻게 내 문제를 디버깅하려고했는지입니다.

Rnge 객체 변수입니다 :

내가 코드를 실행

가 나는 오류를

Sub SearcherBox() 
'E_name is just a name i.e., John Doe 
'Rnge is the range in which KVLOOKUP is searching for "John Doe" 
Dim Rnge as Range 
    Rnge = Sheets("IDBHour1").Range("B2:E120") 
    Sal = Application.WorksheetFunction.KVLOOKUP(E_name, Rnge, 2) 
    MsgBox Sal 
End Sub 
+1

문제가되는 부분 만 질문 범위를 좁히시겠습니까? 전체 코드를 게시 할 필요가 없습니까? 감사합니다. 안부, –

+0

* 어떤 종류의 정의 된 범위도 허용하지 않습니다. * thsi는 무엇을 의미합니까? 오류가 있습니까? 그렇다면 오류는 무엇입니까? –

+0

또한, 'Selection.Value'를 사용하여 ([http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros] [당신을 상대로 조언 할 가치가 있습니다] * * 특히 사용자 양식 및 여러 워크 시트와 관련된 고급 프로그래밍을 할 때 ** –

답변

1

몇 가지 "변수 또는 With 블록 변수가 설정되지 않은 개체"얻는다. 당신이 다음 줄에 오류가 발생하므로 개체 변수도, 당신의 UDF KVLOOKUP이 때문에 WOrksheetFunction 클래스의 멤버가 아닌 WorksheetFunction하지 않고, 또한 그래서,

SET Rnge = Sheets("IDBHour1").Range("B2:E120")

를 할당에 설정 키워드를 사용하여 요구 .

Sal = KVLOOKUP(E_name, Rnge, 2) 
+0

난 항상'SET' 범위를 잊어 버렸습니다. 그리고'End If' ...'KVLOOKUP'이 WorksheetFunction 클래스가 아니라면 왜 OP에 이것을 말하면'Sal = Application.WorksheetFunction.KVLOOKUP (E_name, Rnge, 2)'? (그냥 실수인지, 아니면 내가 어리석은 지 이해하려고 노력하는 것) – SilverShotBee