2013-07-21 2 views
3

나 같은 noob 용 빠른 하나!VBA : 변수 (워크 시트에서)를 함수로 전달

그래서 일반적으로 그와 같은 기능으로 워크 시트에서 데이터의 일부 범위를 전달 :이 함수 foo를 사용하는 몇 가지 기능을 코딩 할 때

public function foo (someRange as range) 
    dim someData as double 
    if IsNumeric(someRange.value), do some crap 
end function 

문제가 발생합니다. 범위 대신 double()을 전달하고 싶습니다. 이 문제를 해결하려면 다음 중 하나를 수행하십시오.

a. 나는 다른 사이트에서 "someRange as Variant"를 사용하는 것을 보았습니다. 그러나 "좋은 코딩 방법"입니까?

b. 대신

답변

1

당신 변종 사용할 수있는 래퍼 함수의 foo_wrap을 사용하고 TypeName 인수의 종류가 공급 된 것을 알 수 :

?TypeName(range("A1")) 
Range 
?TypeName(45.66) 
Double 
?TypeName(array(34.5,56.7)) 
Variant() 

개인적으로, 난 그냥 두 개의 별도의 함수를 만들 것입니다. 하나의 함수를 사용하는 것은 나에게 지저분 할 것이다. 코드를 복제하지 않는 단일 함수의 경우 모든 Range 값을 Double 배열로 추출해야합니다. 이것은 단지 그것이 두 가지 기능을해야한다고 말해줍니다.

래퍼 함수 만들기는 옵션이지만 이것이 좋은 해결책인지 여부를 결정하도록 남겨 두겠습니다. 당신이 다목적 ​​ 기능을 추구 할 않은 경우

당신은 ParamArray 조사 수 : 아글리스트의 마지막 인자로 만 사용

을 최종 인수가 변형의 옵션 배열을 나타 내기 위해 집단.

이렇게하면 범위 수 및/또는 값이 될 수있는 다양한 수의 인수를 허용 할 수있는 기본 제공 함수 (SUM 등)와 유사하게 동작하는 함수를 만들 수 있습니다. 그러나, 특히 당신이 멍청한 놈이라면, 나는 잠시 동안이 가능성을 무시할 것입니다. KISS 원칙.