2016-06-13 5 views
0

범위의 워크 시트 목록을 정렬 한 다음 해당 범위의 테두리를 다시 그려주는 VBA 루틴을 디버깅하는 동안 흥미로운 문제를 발견했습니다.명명 된 범위 수식을 VBA로 셀 값 변경하지 못하게하는 방법

=Tables!$L$2:$L$22 

아래 시트 이름 작업을 수행하는 동안, 종종 셀이 삭제되고 때로는 세포가 삽입된다는 것이다 발생하는 문제를 같이

함유 범위는 공식 명칭 관리자에 정의되어있다. 이름이 지정된 범위의 셀 주소 값을 변경합니다. 그래서 두 개의 셀을 삭제 한 셀, 그리고 첫번째 셀 (L2)에 삽입이 일어날 경우, 화학식 변경

I '가
=Tables!$L$3:$L$22 

=Tables!$L$2:$L$21 

에 화학식 변경 삽입한다면 그 문제는 헤더 범위 이름을 사용하고 하나씩 상쇄 할 수 있다고 확신하지만, 나는 여러 가지 방법을 시도하고 올바르게 이해할 수 없기 때문에 명명 된 범위의 수식에서이를 수행하는 방법을 잘 모릅니다. 그러나 끝 지점 범위 주소가 정적이어야합니다.

어떤 도움에 감사드립니다. 시도

+0

은 $의 제거 막이다. = 테이블 L2 : L22 –

답변

0

것은 사용하는 것입니다

=Indirect("Tables!$L$2:$L$22") 

오히려

=Tables!$L$2:$L$22 

그것은 허용 이름입니다

보다,하지만 난 당신이 동일한 기능을 얻을 것이다 모르겠습니다.

+0

@Garys Student ... 범위가 같거나 범위가 좁은 셀을 삭제하거나 추가하면 내 의견이 더 잘 보이고 호기심이 생길 수 있다고 생각합니다. – dinotom

0

정적 헤더 범위를 사용하는 주석보다 나은 방법을 찾았습니다. 헤더의 offset 함수를 사용하여 전체 범위를 정의하기 만하면됩니다. 1,0,21,1 1 행 헤더로부터 오프셋되어

=OFFSET(AllSheetsHeader,1,0,21,1) 

오프셋 0 열 21 행 높이이고, 1 개은 칼럼

+0

** 작동해야합니다 ** ........... 내 문제는 다른 워크 시트 수식에서 이름이 어떻게 사용되고 있는지 모르기 때문에 테스트 할 수 없습니다. –

+0

@ Gary 's Student ... 나는 AllSheetsRange라는 이름의 AllSheetsHeader와 AllSheetsRange를 정의하고 AllSheetsRange 내의 시트 이름을 가진 셀만 포함하는 AllSheetsNames는 AllSheetsNames가 = OFFSET (AllSheetsHeader, 1 , 0, COUNTA (AllSheetsRange)) 그래서 괜찮을 겁니다, 그렇죠? – dinotom

+0

테스트를하고 작동하면 그것을 사용하십시오 .................... * Indirect() *를 사용하면 실제로 좋지 않습니다. –