통합 문서에 두 개의 명명 된 범위가 있다고 가정 해 보겠습니다. 두 명명 된 범위는 동일한 이름 ("myName"이라고합시다)을 가지지 만 하나는 Sheet1에 범위가 지정되고 다른 하나는 통합 문서의 범위가됩니다.이름이 중복 될 때 Excel 통합 문서의 문자열로 명명 된 범위 가져 오기
명명 된 범위의 이름 (문자열)이 지정되면 명명 된 범위의 통합 문서 수준을 가져 오려고합니다.
네이티브 호출을 사용하는 경우 : wb.Names.Item("myName")
, 범위가 지정된 시트 범위를 반환합니다.
그 대신에 : wb.Names.Item("Sheet1!myName")
을 입력하면 시트 범위의 이름 범위가 분명히 반환됩니다. 나는 시트 특정 것들을 지정하기 위해 이것을 사용할 수 있지만 통합 문서는 지정할 수 없다는 것을 알았다.
어쨌든 통합 문서 범위를 지정할 수 있습니까?
해결 방법 현재 모든 해결 방법은 모든 이름 목록을 반복하고 .Name 속성을 비교하여 통합 문서 범위 명명 된 범위를 가져옵니다. .Name 속성을 "Sheet1!"추가하기 때문에이 작동합니다. 시트 범위의 명명 된 범위. 그러나 이것은 매우 비용이 많이 들고, 나는 그것을 피하고 싶습니다.
그것은 나에게 100 % 분명하다 - 합리적으로 빨리 수십 이름의 수천을 제외하고는 우리가 글로벌 이름의 로컬 버전을 찾기 위해 사용하는 최적화 된 VBA 코드는이 범위. 범위 객체를 이름 문자열로 설정하려고하면 Set rng1 = Range ("myName")'은 * sheet1이 활성화 된 경우 로컬 시트 이름에서 범위를 반환합니다 * 그렇지 않으면 통합 문서 이름의 범위를 반환합니다 . 이것은 가장 안전한 해결 방법이라고 생각합니다. 즉, 활성 시트가 통합 문서 범위로 이름을 사용하기 전에 로컬 이름을 호스팅하는 시트와 다른지 테스트합니다. 이해가 되니? :) – brettdj
또한 parent.name을 통합 문서 이름과 비교할 수 있지만 해당 컬렉션을 추출하려면 이름을 반복해야합니다. – nutsch
re : @ brettdj 님의 댓글입니다. 달성하려는 대상에 따라 가장 쉬운 방법은 코드 시작 부분에 임시 시트를 추가하여 코드 끝 부분에서 삭제하는 것입니다. – nutsch