Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2011, 10:17   #1
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию Работа с неактивным листом

Добрый день, народ!

Подскажите, пожалуйста, почему так:

Код:
Set Massiv = Worksheets(3).Range(Cells(1, 4), Cells(588, 4))

Set Massiv = Worksheets(3).Range("D1:D588")
Первая строка вызывает ошибку:

Run-time Error 1004 Application-defined or object-defined error

Вторая строка работает на ура.


upd.1

Если добавить в начало

Код:
Worksheets(3).Activate
то первая строка срабатывает нормально.
Вторая строка работает и без активации листа

Возможно ли использовать первую строку без активации листа?
(а то во время работы программы, при каждом вызове функции, листы мелькают в глазах)
-Anton- вне форума Ответить с цитированием
Старый 27.06.2011, 10:32   #2
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

хм.. похоже проблему решил. но как-то криво, ИМХО...

Так работает:

Код:
Set Massiv = Worksheets(3).Range(Worksheets(3).Cells(1, 4), Worksheets(3).Cells(588, 4))
-Anton- вне форума Ответить с цитированием
Старый 27.06.2011, 10:38   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
With Worksheets(3)
  Set Massiv = .Range(.Cells(1, 4), .Cells(588, 4))
end with
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось EducatedFool; 27.06.2011 в 10:44. Причина: добавил точку перед Range
IgorGO вне форума Ответить с цитированием
Старый 27.06.2011, 10:45   #4
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Код:
With Worksheets(3)
  Set Massiv = Range(.Cells(1, 4), .Cells(588, 4))
end with
Понял свою ошибку. Спасибо. А перед Range точку ставить не надо?
-Anton- вне форума Ответить с цитированием
Старый 27.06.2011, 10:46   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
хм.. похоже проблему решил. но как-то криво, ИМХО...
вовсе не криво - так и нужно было

Для каждого Range и Cells надо явно указывать, к какому листу относится вызов
(по умолчанию - к активному листу. из-за этого и была ошибка)
EducatedFool вне форума Ответить с цитированием
Старый 27.06.2011, 10:56   #6
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
вовсе не криво - так и нужно было

Для каждого Range и Cells надо явно указывать, к какому листу относится вызов
(по умолчанию - к активному листу. из-за этого и была ошибка)
Понял, спасибо за помощь.
-Anton- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызывающее окно становится неактивным DennerV Win Api 1 01.03.2011 09:44
Привет всем,связать мкрос с листом GRS1988 Microsoft Office Excel 1 01.02.2011 16:42
Общий доступ и работа с защищенным листом. zakv Microsoft Office Excel 0 22.10.2009 09:18
Сайт с Excel Прайс-листом... Stillus Microsoft Office Excel 0 13.07.2009 03:26
Excel (работа со вторым листом) AndreyF Общие вопросы Delphi 1 23.04.2009 08:16