объект Range ведет себя по разному???

Программирование на Visual Basic for Applications
adapter
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 20.05.2003 (Вт) 14:41
Откуда: Ростов

объект Range ведет себя по разному???

Сообщение adapter » 28.05.2008 (Ср) 13:11

честно гря не понял как это но вот в событии по двойному клику код не работает. Зато он же работает если его вызвать из модуля

Код: Выделить всё
' в модуле листа
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim mRange As Range

    Cancel = True   

    Test2

'    Set mRange = Range("изделия!B5:B9")
'    mRange.Cells(1, 1).Copy
'    ActiveSheet.Paste link:=True

End Sub


'в общем модуле
Public Sub Test2()
    Set mRange = Range("изделия!B5:B9")
    mRange.Cells(1, 1).Copy
    ActiveSheet.Paste link:=True

End Sub



т.е. я пытаюсь вставить в ячейку листа "заказы" ссылку на ячейку листа "изделия".

если в событии ДблКлика строчки откоменить то на строке
Set mRange = Range("изделия!B5:B9")

ругается
Method 'Range' of object '_Worksheet' failed

в чем прикол?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.05.2008 (Ср) 13:18

Не надо использовать Range без понимания, как он работает.
Используй Application, Worksheets.
Lasciate ogni speranza, voi ch'entrate.

adapter
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 20.05.2003 (Вт) 14:41
Откуда: Ростов

Сообщение adapter » 28.05.2008 (Ср) 13:26

ну я вот за пониманием и обратился

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.05.2008 (Ср) 14:16

В таком случае постарайся понять, откуда Excel может знать, про какой Range ты ему говоришь?
Указывай ему на конкретный Range.
Lasciate ogni speranza, voi ch'entrate.

adapter
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 20.05.2003 (Вт) 14:41
Откуда: Ростов

Сообщение adapter » 28.05.2008 (Ср) 14:27

Ты меня не понял - перечитай тему внимательно и постарайся понять :)
или я тебя :) поэтому переформулирую. Почему

Set mRange = Range("изделия!B5:B9")

работает только в общем модуле? а в модуле листа НЕ работает?

откуда Excel может знать, про какой Range ты ему говоришь?

ясно ж указано "изделия!B5:B9"

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 28.05.2008 (Ср) 14:40

Тушите свет! Сказано же
Не надо использовать Range без понимания, как он работает.
Используй Application, Worksheets.

значит
Код: Выделить всё
Set mRange = Worksheets("изделия").Range("B5:B9")

попробуйте.
А если модуль листа - это модуль листа "изделия", то вызываете просто
Код: Выделить всё
Set mRange = Range("B5:B9")


Вообще рекомендую изучить суть понятий "Пространство имен" (NameSpace) и "Наследование объектов"
Последний раз редактировалось Денис 28.05.2008 (Ср) 14:45, всего редактировалось 1 раз.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.05.2008 (Ср) 14:42

Это ты меня не понял.
Range не существует сам по себе. Он может существовать только у Application или у Worksheet.
То, что он работает в модуле, возможно потому, что там по умолчанию добавляется Application.
Lasciate ogni speranza, voi ch'entrate.

adapter
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 20.05.2003 (Вт) 14:41
Откуда: Ростов

Сообщение adapter » 28.05.2008 (Ср) 15:10

Да, потестил дело оказалось действительно в
возможно потому, что там по умолчанию добавляется Application.


а в листе (исходя из пространства имен :) - текущий лист

Спасибо, помогли. Че то я сам до этого не дошел.

Мне явно в коде указывать лист через Worksheets("изделия") не хотелось, потому что "изделия!B5:B9" получаю программно и листы разные.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.05.2008 (Ср) 15:12

Тогда указывай Application (Application.Range).
Lasciate ogni speranza, voi ch'entrate.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 100

    TopList