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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2015, 21:40   #1
PreoLo
 
Регистрация: 22.11.2011
Сообщений: 3
По умолчанию Макров не срабатывает на активном листе

Подскажите, почему макрос не срабатывает на активном листе "XXX"?

Sub Test()
Sheets("Лист1").Copy After:=Sheets(1) 'копирую лист
Sheets("Лист1 (2)").Name = "XXX" 'переименовываю его в ХХХ

Sheets("XXX").Activate 'вроде как делаю активным...

'но почему приведённый ниже код срабатывает на "Лист1", а не на активном листе???

Set ColValue = Cells.Find(What:="*", After:=Range("A1"), LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
c = ColValue.Column
Set MyRange = Range([D1], Cells(3, c))
MyRange.Copy

End Sub

Последний раз редактировалось PreoLo; 20.05.2015 в 22:02.
PreoLo вне форума Ответить с цитированием
Старый 20.05.2015, 21:58   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Потому что макрос в листе. Угадал?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 20.05.2015, 22:04   #3
PreoLo
 
Регистрация: 22.11.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Потому что макрос в листе. Угадал?

Да... И как его заставить работать на другом листе?
PreoLo вне форума Ответить с цитированием
Старый 20.05.2015, 22:06   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Положить его туда, где ему и место - в стандартный модуль.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 21.05.2015, 00:20   #5
PreoLo
 
Регистрация: 22.11.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Потому что макрос в листе. Угадал?
Спасибо за подсказку, которая была в вашем вопросе... Подтолкнули в нужном направлении!
Изменил макрос активного листа, прописав обращение к макросу листа другой книги... без модуля... Всё прекрасно отработало...

Последний раз редактировалось PreoLo; 21.05.2015 в 00:46.
PreoLo вне форума Ответить с цитированием
Старый 21.05.2015, 01:06   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

PreoLo,
1. откройте новую книгу, на первом листе в А1 впишите А1 Лист1
2. на втором листе в А1 впишите А1 Лист2
3. откройте редактор VBE (Alt+F11)
4. вставьте модуль в проект
5. скопируйте в модуль1 этот
Код:
Sub Macro1()
  Worksheets(2).Activate
  MsgBox Cells(1, 1)
End Sub
6. скопируйте в модуль листа1 макрос приведенный в п.5
выполните по очереди макросы. макросы одинаковые, делают одно и тоже, а содержание msgbox-ов разное. заметили?
потому что неяное обращение к cells(1,1) в одном случае зависит от того, какой лист активен, а в другом - в каком контексте происходит обращение к cells(1,1)

Hugo121 намекал именно на это
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 21.05.2015 в 09:22.
IgorGO вне форума Ответить с цитированием
Старый 21.05.2015, 08:57   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я намекал на то, что код листа
Код:
MsgBox Cells(1, 1)
всегда выведет значение именно этого листа, не зависимо от того, какой лист активен.
А код модуля будет работать как и задумано.
То, что активация листов практически никогда не нужна - это другое дело.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа на одном листе с данными из LISTBOX, данные на другом листе konstantin1990 Microsoft Office Excel 3 22.07.2013 15:15
как выключить в активном окне звук delphi KWN, lnc Мультимедиа в Delphi 29 22.01.2012 21:53
Эмуляция нажатия клавиши в любом активном приложении Marsel737 Общие вопросы Delphi 1 19.03.2010 14:44
ячейка на одном листе, в которую необходимо подставлять данные из столбца, находящегося на другом листе Ирина Водолагина Microsoft Office Excel 4 04.03.2009 23:38
Поиск в реестре* не активном nivea Помощь студентам 3 14.01.2008 17:42