Excel에서 명명 된 범위의 범위에 대해 약간 혼란 스럽습니다. 두 가지 버전의 Excel 통합 문서가 있습니다. 경우에 따라 사용자는 이전 버전의 통합 문서에서 더 새로운 버전으로 데이터를 복사해야합니다. 대부분의 셀 계산에는 사용자 지정 VBA 함수가 사용됩니다. 각 기능은 시트에서 4 ~ 12 개의 명명 된 범위를 찾습니다. 이것은 잘 작동하는 것처럼 보였습니다 ... 그러나 최근에 두 파일 버전이 열리면 모든 명명 된 범위에 대한 VBA 참조가 열린 첫 번째 파일의 값만 반환한다는 것을 알았습니다 (따라서 새 버전의 양식이 처음 열리면 이전 버전은 일부 데이터가 새 버전에서 나온 것처럼 작동합니다!). 두 번째 파일의 명명 된 범위는 두 파일이 모두 열려있는 한 VBA 코드에서 두 번째 파일에 의해 무시됩니다. 먼저 열린 통합 문서를 닫으면 두 번째 문서가 올바르게 계산됩니다. 통합 문서 사이에 중복 된 명명 된 범위로 인해 사용자 지정 함수가 혼동을 느낀다
가 나는 부분 수정을 발견하는 대신이 일을 :Blah = Range("valueXYZ").Value
내가이 대신 수행
Blah = ThisWorkbook.Names("namedCellXYZ").RefersToRange.Value
이 있지만 통합 문서의 최신 버전에, 잘 작동합니다. 통합 문서의 이전 버전에서 VBA 코드를 업데이트 할 수 없습니다. 즉, 새 버전이 이미 열려 있어도 고객이 이전 버전을 열면 (두 버전 모두 열려 있지만 이전 버전은 두 번째로 열림) 이전 버전은 새 버전에서 값과 명명 된 범위를 가져 오게됩니다. 잘못된 숫자와 범위를보고합니다. 이것은 나쁘다. 이전 시트가 새 시트에서 명명 된 범위에 액세스하지 못하도록하는 좋은 방법이 필요하지만 새 시트 만 수정할 수 있습니다. 내가 생각할 수있는 유일한 것은 새로운 버전에서 모든 명명 된 범위의 이름을 바꾸고 많은 VBA 코드를 업데이트하는 것입니다. 오류 및 과도한 작업 같은 경향이있는 것입니다.
제안 사항? 예를 들어 두 번째 파일을 열 때 적어도 사용자에게 경고를 표시 할 수 있습니까? 또는 VBA를 사용하여 명명 된 범위의 범위를 제한 할 수 있습니까? 다른 아이디어?
좋습니다. 그러나이 이벤트 처리기를 실행하는 데 문제가 있습니다. –
나는 그것을 작동시켰다 - 나는 이벤트가 작동하기 시작하도록 Excel을 재시작해야했다. 감사!!흥미로운 측면에서, 내가 알 수있는 한, 새로운 버전은 이미 열려있는 통합 문서를 확인할 필요가 없습니다. 첫 번째 통합 문서가 우선권을가집니다. 따라서 이전 버전이 먼저 열리면 명명 된 범위가 작동합니다 올바르게 작동하도록 새로운 버전이 올바르게 설계되었습니다 (따라서 이전 버전이 두 번째로 열리는 경우에만 문제가됩니다). 따라서 가장 많이 업데이트 된 통합 문서를 확인하는 기능 만 설정하면됩니다. –
예, 맞습니다. 사용자가 Old old, New를 열면 Old는 Old (처음 열렸 음)를 참조하고 New는 New (정규화 된 참조)를 참조하므로 아무런 문제가 없습니다. 사용자가 New, Old를 열면 사용자에게 경고해야합니다. 더 멀리 가고 싶다면 경고를 표시 한 다음 사용자에게 문제를 해결하기 위해 New를 닫았다가 다시 열 수 있는지 물어보십시오. New에 대한 저장되지 않은 변경 사항이있는 경우 사용자는 저장, 저장 또는 취소 중 하나를 수행해야합니다. – devuxer