Aby opracować, załóżmy, że mam dwa nazwane zakresy w moim skoroszycie. Oba nazwane zakresy mają tę samą nazwę (powiedzmy "myName"), ale jedna z nich ma zasięg do arkusza1, a druga ma zasięg do skoroszytu.Uzyskaj nazwany zakres według ciągu w skoroszycie programu Excel, gdy nazwa jest powielana
Biorąc pod uwagę nazwę (ciąg) nazwanego zakresu, chcę pobrać poziom nazwany Skrócone skoroszytu.
Jeśli korzystam z połączenia natywnego: wb.Names.Item("myName")
, funkcja zwraca zakres nazwany w arkuszu.
Jeśli zamiast tego robię: wb.Names.Item("Sheet1!myName")
, to oczywiście zwraca zakres nazw zakresów arkusza. Zauważyłem, że mogę użyć tego do określenia specyficznych dla arkusza, ale nie do skoroszytu.
Czy mimo to mogę określić, że skoroszyt ma jeden zakres?
Moje obejście polega na iteracji na liście wszystkich nazw i porównaniu właściwości .Name w celu pobrania zakresu nazwanego zakresu skoroszytu. Działa to, ponieważ właściwość .Name dołącza "Arkusz1!" do arkusza o nazwie Zasięg. Jest to jednak bardzo kosztowne i chcę tego uniknąć.
To nie jest 100% dla mnie jasne, w jaki sposób są za pomocą zasięg. Jeśli próbujesz ustawić obiekt zakresu na ciąg znaków, wówczas 'Set rng1 = Range (" myName ")' zwróci zakres z lokalnej nazwy arkusza, jeśli * sheet1 jest aktywny * w przeciwnym wypadku zwróci zakres od nazwy ze skoroszytu . Myślę, że jest to najczystsze rozwiązanie - tzn. Sprawdź, czy aktywny arkusz różni się od arkusza zawierającego nazwę lokalną, zanim zacznie używać tej nazwy jako zakresu skoroszytu. Ma sens? :) – brettdj
można również porównać parent.name ze nazwą skoroszytu, ale nadal trzeba pętli przez nazwy, aby wyodrębnić tę kolekcję. – nutsch
re: @ brettdj's comment. w zależności od tego, co próbujesz osiągnąć, najłatwiej jest po prostu dodać arkusz tymczasowy na początku makra, który ma zostać usunięty na końcu kodu. – nutsch