2013-03-26 2 views
1

입력 셀 (예 : "B5")을 사용하여 테이블을 참조하는 범위 개체를 반환하는 함수를 작성하려고합니다. 내가 여기에 많은 문제로 실행했습니다, 나는 단순한 뭔가 빠진 것 같은 기분excel-vba에서 범위 개체를 함수에 전달하면 "Object Required"오류가 발생합니다.

Sub Macro1() 
Dim testCell As Range 

testCell = Worksheets("HMA").Range("B5") 
ReturnTable testCell 

End Sub 

Function ReturnTable(cell As Range) 
    firstcell = cell 
    lastrow = firstcell.End(x1Down) 
    Table = Range(firstcell, lastrow + 5).Value 
End Function 

(이 중 제공된 셀은 오른쪽 상단 항목입니다). 내가 얻는 오류는 lastRow 줄에 "Object Required"입니다.

디버그 모드에서 살펴보면 testCell에 range 객체의 값이 할당되어있는 것을 볼 수 있습니다 (기본값이라고 가정합니다). 내가 여기서 무엇을 놓치고 있니?

제 접근 방식이 효과가 있습니까? 이 문제를 다른 방식으로 해결해야할까요?

+2

당신은, 그렇지 않으면 당신은 –

답변

3

End는 Range 개체를 반환하므로 lastrow는 범위 변수 여야합니다.

Function ReturnTable(firstcell as Range) as Range 'add this as range to tell the result of the function is a range 
    dim LastCell as Range 
    Set LastCell = firstcell.END(xldown) 
    Set ReturnTable = Range(firstcell, lastcell) 'must use the same name of the function 
End Function 

당신이 lastcell 아래 5 개 세포를 원하는 경우에, LastCell.Offset(5,0)

그리고을 Macro1에, 당신은 아마

Set SomeVar = ReturnTable(testcell) 
+0

우수 (이 경우'.Value'에) 범위의 기본 속성을 할당하고, testCell의 값 (또는 다른 개체 변수를) 할당'Set'를 사용할 필요가 정보 주셔서 감사합니다. 이것은 아름답게 작동했습니다 – user1860694

3

같은 당신이 사용해야합니다 (범위 등) 오브젝트를 할당 할 때 원하는 것을 사용 "세트".

"설정"하지 않고 범위를 지정하면 VBA는 범위 자체가 아닌 범위 값을 할당합니다.

Set testCell = Worksheets("HMA").Range("B5") 
+0

입력 해 주셔서 감사합니다. – user1860694

관련 문제