Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
VeX
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
1

Запуск модуля из другого модуля

21.07.2015, 13:10. Просмотров 5067. Ответов 9
Метки нет (Все метки)

Возможно ли запустить весь модуль целиком из события формы?
Visual Basic
1
2
3
Sub Кнопка_Click()
    Module1
End Sub
При ссылке на модуль выдает ошибку:
https://msdn.microsoft.com/en-us/library/office/gg251600.aspx

П.С. Как вызвать процедуру я понял - возможно ли вызвать весь модуль целиком или же нужно все процедуры модуля заключить в одну процедуру и вызвать ее?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2015, 13:10
Ответы с готовыми решениями:

запуск модуля из модуля (Sub test() CommandBars(1).Enabled = False load module2.test1 End Sub)
Sub test() CommandBars(1).Enabled = False load module2.test1 End Subвот...

Функции модуля работают, но самого модуля в книге не видно
Помогите, пожалуйста. Написал в модуле функцию. Использовал ее на листе и...

Создание модуля Class из модуля Code в личной книге
Помогите пожалуйста!!! Не могу создать модуль Class в создаваемой из...

Как запустить Private Sub из другого модуля?
Ааа, добрый день! Подскажите, пожалуйста, как запустить программу Private Sub...

Ссылка на объектную переменную из другого модуля проэкта
Всем доброе время суток ! Первым макросом создаётся таблица с помощью кода:...

9
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
21.07.2015, 15:41 2
Цитата Сообщение от VeX Посмотреть сообщение
или же нужно все процедуры модуля заключить в одну процедуру и вызвать ее?
Да.
0
VeX
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
21.07.2015, 23:00  [ТС] 3
Хотелось бы знать наверняка вызвать модуль по имени невозможно или можно? мне кажется где-то я видел пример с вызовом модуля по имени или же имя модуля имело такое же имя как и функция
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
21.07.2015, 23:38 4
Вызывать можно процедуру. Весь модуль нельзя вызвать, т.к. это контейнер для хранения процедур. Представьте себе склад товаров для интернет-магазина: можно заказать доставку конкретного товара(ов) на дом, но нельзя заказать доставку всего здания склада на дом.
0
VeX
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
22.07.2015, 02:00  [ТС] 5
но можно дать адрес склада, где товар лежит другому покупателю. не возить же ему товар если никому кроме него он больше не нужен. шутка. я понял спасибо.

а еще если создать процедуру с именем как у модуля могут ли быть конфликты какие? или так можно?
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
22.07.2015, 11:46 6
Лучше не надо. Конфликтов не будет, т.к. вызвать модуль нельзя и команда Call не будет искать именно модуль с таким именем. Она будет искать процедуры и функции. Но и с точки зрения правильного программирования лучше разделять наглядно модули от процедур.
0
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7066 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
22.07.2015, 13:51 7
Цитата Сообщение от The_Prist Посмотреть сообщение
Конфликтов не будет, т.к. вызвать модуль нельзя и команда Call не будет искать именно модуль с таким именем. Она будет искать процедуры и функции.
Неправда.
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
22.07.2015, 14:54 8
Цитата Сообщение от Dragokas Посмотреть сообщение
Неправда
?
Создал стандартный модуль. По-умолчанию имя ему - Module1. Далее создал две процедуры:
Visual Basic
1
2
3
4
5
6
7
Sub Module1()
    MsgBox "work"
End Sub
 
Sub test()
    Call Module1
End Sub
запустил test. Все отработало. Или я чего-то не понял? Конфликта не возникло, все отработало.
0
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7066 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
22.07.2015, 17:28 9
Правила именования разные.

Попробуйте сделать вызов из другого модуля или:
Цитата Сообщение от VeX Посмотреть сообщение
из события формы
Добавлено через 4 минуты
Sub Module1 естественно сделать публичным методом.
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
22.07.2015, 18:43 10
Лучший ответ Сообщение было отмечено VeX как решение

Решение

Согласен, в таком случае конфликт неизбежен, если вызывать строго только по имени процедуры, т.к. нет однозначности в вызове. Ведь по сути Module1 содержит процедуру, которая полностью дублирует его имя. VB спотыкается именно из-за нарушения именования процедур. Но вызвать-то можно:
Visual Basic
1
2
3
Sub test()
    Call Module1.Module1
End Sub
и это не повлечет ошибок. По умолчанию Call ищет процедуры и функции с указанным именем в модуле, из которого произошел вызов и сама подставляет имя модуля. Если же вызывается процедура из другого модуля - то из-за конфликта имен Call просто не сможет вызывать эту процедуру и подставить правильное имя модуля, т.к. в силу вступает правило старшинства - сначала должен указываться именно модуль. И именно за имя модуля Call принимает Module1 и видит, что дальше нет указания процедуры. А модули вызывать нельзя.

Так же можно упомянуть, что в двух разных модулях допускается создавать процедуры с одинаковым именем - и явного конфликта не будет. Будет вызвана процедура из того модуля, из которого произошел вызов. Но если вызывается процедура из третьего модуля, в котором нет процедуры с таким именем - то опять получим ошибку из-за неоднозначности. Надо явно указать имя модуля, процедуру из которого хотим вызвать.

Т.е. называть процедуру таким же именем как и модуль можно и даже можно её вызвать. Но делать это надо правильно. А лучше вообще этого не делать, чтобы проблем не было.
1
22.07.2015, 18:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2015, 18:43

Описание Модуля
Можете описать в этом коде что и как выполняется! описать выражение что они...

Пример модуля Access
Нужен пример какого-нибудь модуля для Access желательно с использованием форм,...

Разработка программного модуля
Нужна помощь с интегралом, кто может пожалуйста помогите


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru