Есть ли аналог ActiveCell.Select : как ActiveSheets.Select?

Программирование на Visual Basic for Applications
sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Есть ли аналог ActiveCell.Select : как ActiveSheets.Select?

Сообщение sonata » 15.10.2003 (Ср) 13:49

Очень надо применять макрос к разным листам...
Как быть в этом случае: ActiveSheets.Select
вызывает ошибку...

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 15.10.2003 (Ср) 14:28

если твой макрос находится в модуле листа, то Activecell Будет имется ввиду активная ячейка даннного листа, и будет ошибка, если лист не активен.
А если макрос в модуле макросов, то Activecell это активная ячейка реального активного листа.
Примерно тоже с ActiveSheets.


А к любой другой ячейки обращайся через Cells, без указания родителей:
Cells(1,1).value =1
из модуля макросов это будет обращения к ячейке A1 активного листа


П.С.
Для того что бы выделить ячейку(лист) неактивной книги, необходимо сначало выделить книгу, и лишь за тем, лист, за тем ячейку. Иначе будет ошибка!

Еще, если из объекта расположеного на листе мы обращаемся к ячеке, то ее активизируют методом Activecell.activate

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 15.10.2003 (Ср) 15:27

Хочу уточнить модуль листа -это модуль файла?
модуль макросов-книга макросов?

Просто у меня макрос находится в модуле файла, не в листе...
Как тогда быть?

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 15.10.2003 (Ср) 15:44

Когда ты на дереве проекта выбираешь, например, Лист1, это модуль листа. А если на дереве проекта выбираешь Модуль1, это модуль макросов, хотя он может и по другому называтся.

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 15.10.2003 (Ср) 16:06

:? У меня вылезала ошибка здесь:
Columns("C:C").Select
Тогда я решила написать ActiveSheets.Select перед этой строкой
и вылезла ошибка...Как обойти?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 15.10.2003 (Ср) 16:33

Проще будет если ты положишь сюда весь текст макроса :)

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 15.10.2003 (Ср) 17:00

:lol:
Смешно!
Сам текст макроса не представляет никакого интереса для Вас...
Просто мне нужно было реализовать непростую сортировку
по договорам, которые имеют названия типа:143Д, 145Н,156С,Так вот, я сначала копирую столбец с договорами , потом в нем удаляю буквы и
сортирую, а потом удаляю этот промежуточный столбец...
Вот такая вот сложная сортировка и надо ее производить в разных
листах...Каждый раз залезаю в VBA и вписываю имя листа.
Хотела как-то обойти эту процедуру... :?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 15.10.2003 (Ср) 17:19

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

Вообще есть проперть ActiveSheet которая содержит ссылку на активный в данный момент лист. Так что может имеет смысл ей воспользоваться.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.10.2003 (Чт) 8:40

Соната, activesheet.select не имеет смысла :) Это ж попытка сделать активный лист активным. Злостная тавтология.

И вообще :) Переставай программировать в стиле автоматически записываемого макроса :wink: Это он постоянно объектам select делает. А когда ты сама макрос пишешь, то можешь обратиться к любому объекту без всякого select. Просто пиши ActiveSheet.Columns("c:c").DesiredAction.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 16.10.2003 (Чт) 9:44

GSerg, ну ты вообще за кого меня принимаешь то :)

Я и советовал не париться с селектами и чтобы не ввдить имя листа просто использовать Activesheet. В смысле чтоб макро всегда работал только с активным листом.

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 16.10.2003 (Чт) 10:54

GSerg
Спасибо большое!
Что и требовалось доказать!Все оказалось легко,
И никакого кода не потребовалось! :wink:

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 16.10.2003 (Чт) 15:33

Соната, activesheet.select не имеет смысла Это ж попытка сделать активный лист активным. Злостная тавтология.

Не знаю как на счет листа, а на счет ячейки... Я как то сделал макрос сортировки таблицы, и решил запускать его от кнопки VBA расположенную на листе, который сортировался. Но ячейка при нажатии на кнопку теряла фокус, и макрос не срабатывал. Пришлось прописать в нем в начале: Activecell.activate. к статит, select не работал.


Вернуться в VBA

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

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

    TopList