2017-03-27 1 views
1

범위의 전체 이름을 함수로 전송할 수 없습니다.VBA - 시트 범위를 함수로 전송

2 장이 있습니다. WS1과 WS2.

하위에서는 WS1 및 WS2와 관련된 다양한 범위를 찾습니다. 내가 디버깅 할 때 하지만, 자신의 좌표는 시트의 이름 앞에되지 않습니다

Public Function myFunction(ByRef amountRange As Range) 
.... 
End Function 






Sub Testons() 
' 
Dim nb As Integer, lastrow As Integer, 
Dim WS1 As Worksheet, WS2 As Worksheet 
With ThisWorkbook 
     Set WS1 = .Worksheets("WS1"): Set WS2 = .Worksheets("WS2") 
    End With 

    With Worksheets("WS1") 
     nb = .Range("A2", .Range("A2").End(xlDown)).Rows.Count 
     lastrow = nb + 1 
     Set amountRange = WS1.Range("C2:C" & lastrow) 
'THIS RESULTS IN 'WS1'!$C$2:$C$9 AND NOT IN 'WS1'!$C$2:$C$9 (what I want) 
    End With 
    result = myFunction(amountRange) 
End Sub 

은 결과적으로 내 기능 내가 원하는 작업을 수행 할 수 없습니다. 'WS1'과 같이 워크 시트 이름 앞에 범위를 두는 방법! $ C $ 2 : $ C $ 9?

+1

왜 필요합니까? 주소를 전달하지 않습니까? – SJR

+3

당신이 뭘할지 분명치 않다. "WS1 '의 결과는 $ C $ 2 : $ C $ 9 그리고'WS1 '! $ C $ 2 : $ C $ 9 (내가 원하는 것)'- 둘 다 같은 결과입니다. 'Dim nb As Integer, lastrow As Integer' - 오버 플로우 오류를 일으키고 long으로 변경합니다. AmountRange는 WS1 시트에서 C2 : Cxxxx에 대한 참조를 보유합니다. 정확한 ** 문자열 **을 얻으려면' " '& amountrange.Parent.name &"'!를 사용하십시오. & amountrange.Address' –

+2

'Testons()'에서 'amountRange'를 Range로 선언하고 있다고 가정합니까? Range 자체를 myFunction에 전달하고 있으므로, 거기에서 수행중인 작업을 살펴 ​​봐야합니다. – CLR

답변

1

이것은 VBA가 Excel에 비해 다른 방법으로 셀에 대한 참조를 처리하기 때문입니다. 세포가

range.parent.name에 속하는 곳

당신은

range.address

시트와 범위의 좌표를 찾을 수 있습니다.

0

대단히 감사합니다. Darren "'" & amountrange.Parent.name & "'!" & amountrange.Address이 내가 필요한 답변입니다. 지금 사용하고 있습니다 :

amountRange.Address(External:=True)