Страницы: 1
RSS
Код не работает для других книг
 
Вам, наверное, покажется странным, что я задаю такой простой вопрос - но всё же...  
Может, кто объяснит в двух словах, в чем проблема?  
 
Поместил такой макрос в модуль ЭтаКнига:  
 
Sub test()  
   Dim ra As Range  
   Set ra = Intersect(Selection, ActiveSheet.UsedRange)  
End Sub  
 
Все работает без ошибок.  
 
 
Потом открыл другую книгу, и попытался запустить из неё макрос, оставшийся в модуле ЭтаКнига другого файла.  
 
Результат - ошибка (msgbox 400)  
 
В чем проблема?  
Я догадываюсь, что ошибка возникает при попытке взять пересечение из диапазонов, принадлежащим РАЗНЫМ книгам.  
Но почему так происходит?  
 
По идее, и Selection, и ActiveSheet.UsedRange должны ссылаться на активную книгу (на активный лист), но никак не на книгу, в модуле которой находится код.
 
Вот так работает:  
 
Sub test()  
Dim ra As Range  
Debug.Print ActiveSheet.UsedRange.Rows.Count  
Debug.Print Selection.Rows.Count  
Set ra = Intersect(Selection, ActiveWorkbook.ActiveSheet.UsedRange)  
End Sub
 
Т.е. я так понимаю - в каждой открытой книге есть активный лист (даже если книга неактивна), поэтому надо указать явно книгу.
 
Легко при отладочном режиме занести в Watches Selection и прсмотреть свойства Parent.Parent. То же и с ActiveSheet.UsedRange.
Я сам - дурнее всякого примера! ...
 
А если Sub test() помещаю в стандартный модуль - всё срабатывает.
 
{quote}{login=Юрий М}{date=27.06.2010 02:35}{thema=}{post}А если Sub test() помещаю в стандартный модуль - всё срабатывает.{/post}{/quote}  
Ну и правильно. В модуле Эта Книга селекшн по умолчанию ссылыется на свойство Me. А в общем модуле - куда прикажут.
Я сам - дурнее всякого примера! ...
 
Спасиба за ответы.  
 
Как-то и не подумал, что activesheet может ссылаться не на тот лист, который отображается в данный момент на экране.  
 
Действительно, замена  ActiveSheet на  ActiveWorkbook.ActiveSheet решает проблему.  
Думал, что раз уж свойство ActiveSheet есть у объектов application и window, оно и будет использовано...  
Не первый раз уже совершаю подобную ошибку.  
 
 
> В модуле Эта Книга селекшн по умолчанию ссылыется на свойство Me  
Selection не может ссылаться на ME  
Свойство Selection есть только у 2 объектов - application и window
 
{quote}{login=EducatedFool}{date=27.06.2010 04:28}{thema=}{post}  
> В модуле Эта Книга селекшн по умолчанию ссылыется на свойство Me  
Selection не может ссылаться на ME  
Свойство Selection есть только у 2 объектов - application и window{/post}{/quote}  
Дык, я и не писал о свойстве Selection:-) И вообще, я чисто теоретически раскинул мозгом(улыбаюсь сейчас), поэтому и предложил заглянуть в свойства Parent.Parent(вот так, опосредованно, может ссылаться на Ме) обоих выражений.  
EducatedFool, с уважением к Вам, Сергей.
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх