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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 00:55   #1
Cobra9100
 
Регистрация: 12.10.2008
Сообщений: 5
По умолчанию Автозапуск

Интересует вопрос:
Как запустить процедуру (программу) на одном из листов при открытии книги Excel или запустить процедуру (программу) при помощи макроса?
Заранее спасибо.
Cobra9100 вне форума
Старый 13.01.2009, 02:11   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

выполнить макрос можно двумя основными способами:
1. толчком для выполнения могут быть действия пользователя:
а) открыл редактор ВБА, поставил курсор в тело макроса и нажал кнопку выполнить макрос (кнопку F5 или F8 для пошагового выполнения)
б) щелкнул по кнопке на листе (а кнопке назначен макрос). в 2007 макросы можно назначить многим графическим обьектам
в) выполнил ранее назначенный пользовательский пунк меню или щелкнул по пользовательской кнопке на панеле инструментов
2. если на определенное стандартное событие описана процедура его обработки, то при каждом возникновении этого события будет выполнятся эта процедура. поцедуры обработки событий (в основном) имеют стандартные имена, стандартные параметры, должны быть обьявлены надлежащим образом в соответственных модулях. Почитайте в помощи Event для Form, WorkBook, WorkSheet и увидите много интересного. Событий довольно много, некоторые имеют отношение к формам, некоторые к листам, некоторые к книге, некоторые к проекту и т.д.
Данный пост не является исчерпывающим ответом на вопрос: я всех событий не знаю и не берусь их здесь перечислять, а тем более толковать, - здесь просто несколько примеров для общего представления о сути вопроса.

Посмотрите вложение. Обьявлено 4 процедуры. 3 в модуле проекта и одна в модуле листа. Аналогично процедуры обьявляются в модулях форм или книги. Для каждой свое место. Заголовки процедур (название и параметры) необходимо смотреть в помощи.
Вложения
Тип файла: rar Книга1.rar (8.9 Кб, 30 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 13.01.2009, 11:50   #3
Cobra9100
 
Регистрация: 12.10.2008
Сообщений: 5
По умолчанию

IgorGO спасибо, что откликнулись на просьбу о помощи.
Извиняюсь, может, мой вопрос не столь корректен, т.к. его писал ближе к полуночи и после 3 часового поиска и попыток решить его самостоятельно.
Сформулирую немного иначе:
Есть процедура на одном из листов, можно ли ее запустить автоматически при открытии книги или вызвать процедуру при помощи макроса в Module.
Вложения
Тип файла: rar Auto.rar (8.3 Кб, 26 просмотров)
Cobra9100 вне форума
Старый 13.01.2009, 12:36   #4
b00s
Форумчанин
 
Регистрация: 19.01.2008
Сообщений: 120
По умолчанию

Цитата:
можно ли ее запустить автоматически при открытии книги
Private Sub Workbook_Open()
<Имя процедуры которую нужно вызвать>
End Sub
b00s вне форума
Старый 13.01.2009, 13:09   #5
Cobra9100
 
Регистрация: 12.10.2008
Сообщений: 5
По умолчанию

Цитата:
Сообщение от b00s Посмотреть сообщение
Private Sub Workbook_Open()
<Имя процедуры которую нужно вызвать>
End Sub
За ответ спасибо, но так не получается, это первое что я сделал, в этом случае выдает ошибку("Sub or Function not defined").
Как макрос из процедуры на одном из листов (скажим так) вызвать я знаю, а вот обратное действие, тоесть вызвать процедуру на одном из листов книги из макроса нет.
Cobra9100 вне форума
Старый 13.01.2009, 13:23   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Короткий ответ - можно.
Небольшое отступление по организации возможностей для написания собственного кода:
Открываем ВБА редактор, видим проект(ы) - соответствуют открытым книгам. В каждом пректе для написания собственного кода доступны следующие обьекты:
лист(ы)
книга
дополнительно (если присутствуют) доступны
модуль(и)
форма(ы).

Процедуры, описанные в модуле, видны отовсюду, т.е. просто в коде любого обьекта пишем имя процедуры - она сработает.
Что запустить процедуру, описанную на листе, необходимо писать полный путь к ней: worksheets(N).ProcName
где,
worksheets(N) - конкретный лист, поставьте вместо N число или используйте "имя листа в скобках", или используйте любой другой способ сослаться на конкретный лист.
ProcName - имя процедуры обьявленное на листе

Конкретно по вашему вопросу:
1. В показанном ранее примере в процедуре auto_open впишите worksheets(N).ProcName
2. Та же рекомендация для примера выложенного b00s. Только описанная в примере процедура должна находится в книге
3. перенесите процедуру в модуль и вызовите из auto_open или перенесите ее в модуль и назовите auto_open.

Во всех трех случаях ваша процедура выполнится автоматически при открытии книги.
Удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 13.01.2009, 13:27   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Проблема заключалась в том, что в Вашем файле функция R1 определена с ключевым словом Private:

Код:
Private Sub R1()
  MsgBox ("Вот так")
End Sub
Во-первых, уберите ключевое слово Private,
Код:
Sub R1()
    MsgBox ("Вот так")
End Sub
а во-вторых, функцию, расположенную в модуле листа, надо вызывать, указывая Excel-ю, где расположена эта функция:
Код:
Sub Макрос1()
    Лист1.R1
End Sub
(Добавлено)
В этот раз я опоздал с ответом
EducatedFool вне форума
Старый 13.01.2009, 13:54   #8
Cobra9100
 
Регистрация: 12.10.2008
Сообщений: 5
По умолчанию

Спасибо ОГРОМНОЕ, теперь все вышло. На будущее буду знать.
Еще раз спасибо и всех прошедшими праздниками.
Cobra9100 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозапуск, Delphi north Помощь студентам 19 06.08.2009 15:48
Автозапуск Satorin Общие вопросы Delphi 14 14.12.2008 16:11
Автозапуск PROGR Общие вопросы Delphi 8 26.12.2007 08:54
Автозапуск zzzzz Общие вопросы Delphi 2 12.11.2007 08:54
автозапуск effluent Безопасность, Шифрование 7 19.04.2007 20:12