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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.06.2008, 20:39   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Перенос макроса в модуль

Вот макрос для листа, как его "воткнуть" в модуль?
Что означает "Target" и "Target.Row ", и "Me."????

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
iRow& = Target.Row - 31: iStep& = iRow& \ 48
If Not Intersect(Target, _
Me.Range("I31:I36").Offset(iStep& * 48)) Is Nothing Then
------------------------------------------------------
End If
End Sub
valerij вне форума
Старый 09.06.2008, 21:32   #2
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Target - ячейка, в которой произошло изменение
Target.Row - номер строки ячейки, в которой произошло изменение
Me - Лист, где отслеживаются изменения ячеек (ссылка на родителя)
- Me у листа - сам лист (чтобы не писать Лист1, Лист2 и т.д.)
- Me у формы - сама форма (чтобы не писать UserForm1, UserForm2 и т.д.)
Pavel55 вне форума
Старый 09.06.2008, 21:39   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

А в модуль как перенести?
Если вместо
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Пишу
Sub zxc()
Dim Target As Range
Ошибка, а почему?
valerij вне форума
Старый 09.06.2008, 22:10   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

процедуру
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
с листа в модуль перенести нельзя, точнее можно, но она не будет там срабатывать при изменении данных на листе.
Она должна находиться на листе и быть обьявлена именно так.

Если есть желание, чтобы что-то происходило в модуле при каждом изменении на листе необходимо от сюда, из Private Sub Worksheet_Change(ByVal Target As Excel.Range) вызвать любую процедуру обьявленную в модуле
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 09.06.2008, 22:24   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
процедуру
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
с листа в модуль перенести нельзя, точнее можно, но она не будет там срабатывать при изменении данных на листе.
IgorGO
А мне как раз и не надо, что бы срабатывала при изменений.
Мне надо, нажать кнопку и только тогда прошли изменения.
valerij вне форума
Старый 09.06.2008, 22:56   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
А мне как раз и не надо, что бы срабатывала при изменений.
это специфическая, служебная процедура листа, срабатывает не при изменениях, а после того, как в любой ячейке этого листа изменились данные. У нее предназначение такое - срабатывать после изменений.

если "как раз и не надо" - то удалить ее с листа она и не будет работать.

а если надо навесить на лист кнопку, при нажатии на которую запуститься определенная процедура, то:
1. создаем процедуру (как минимум написать sub ИМЯмя и нажать Enter чтобы Эксель дописал end sub)
2. в меню "Вид" / "Панели инструментов" выбрать "Формы", отметить курсором элемент "Кнопка" и задать габариты кнопки на листе. Эксель сделает на ней надпись Кнопка 1 (если это первая кнопка на листе), и сразу же предложит выбрать процедуру, которая будет срабатывать при клике на кнопку.

зачем мы семь ответов маемся с Private Sub Worksheet_Change(ByVal Target As Excel.Range) - не пойму.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 09.06.2008, 23:13   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
это специфическая, служебная процедура листа, срабатывает не при изменениях, а после того, как в любой ячейке этого листа изменились данные. У нее предназначение такое - срабатывать после изменений.
Спасибо, все понял.
valerij вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматический запуск макроса Len@ Microsoft Office Excel 6 23.07.2008 12:05
Создание SetUp для макроса Romuald Microsoft Office Excel 3 06.06.2008 12:23
Привязка макроса к кнопке VisuaL Microsoft Office Excel 7 10.05.2008 07:04
Запись макроса valerij Microsoft Office Excel 5 01.12.2007 00:49