Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чем процедура Паблик отличается от просто процедуры?

248
22 декабря 2012 года
Dmitry2064
590 / / 06.12.2006
Есть sub и есть Public sub. В чем разница? Какой вариант лучше использовать внутри модуля, посвященного одной задаче? Т.е. из этого модуля обращений к др, модулям не будет.
1
22 декабря 2012 года
kot_
7.3K / / 20.01.2000
Если речь идет о Sub и Public Sub то разницы никакой. Если модуль же объявлен как приватный (Private Sub) - то к нему может получать доступ другой макрос, но не пользователь.
248
23 декабря 2012 года
Dmitry2064
590 / / 06.12.2006
Интересно, спасибо!
327
24 декабря 2012 года
UserNet2008
748 / / 03.04.2010
Цитата: kot_
Если речь идет о Sub и Public Sub то разницы никакой.


Как я понял вы совсем не разбираетесь в модульном программировании на VB.
Если Public Sub объявлена в модуле - это видимость процедуры в VB везде, где можно (в других модулях, в формах, в API функциях) .

Цитата:
Если модуль же объявлен как приватный (Private Sub) - то к нему может получать доступ другой макрос, но не пользователь.


Это полный бред.

Для лучшего понимания модуля приведу пример:
При закрытие формы появляется диалоговое окно типа такого:



Весь нужный код помещаем в модуль и назовем его например ExitProgram
Теперь модуль ExitProgram можно подключать в других проэктах (программах)
преимущество:
Не надо писать код дважды
Отладка проще.
Сам код в модуле не мешает , коду Main проэкта т.к находится в отдельном окне.
Таких модулей может быть куча.

275
24 декабря 2012 года
pashulka
985 / / 19.09.2004
UserNet2008, по всей видимости, имелось ввиду, что использование Private приводит к тому, что такой макрос не виден в списке макросов (Сервис - Макрос - Макросы)
327
25 декабря 2012 года
UserNet2008
748 / / 03.04.2010
Цитата:
что такой макрос не виден в списке макросов (Сервис - Макрос - Макросы)


Видимость это на уровне кода, а не редактора. Все макросы показывает Word. Иначе получается если не Public значит вся работа накрылась - одним местом?

1
25 декабря 2012 года
kot_
7.3K / / 20.01.2000
Цитата: UserNet2008
Цитата:
что такой макрос не виден в списке макросов (Сервис - Макрос - Макросы)


Видимость это на уровне кода, а не редактора. Все макросы показывает Word. Иначе получается если не Public значит вся работа накрылась - одним местом?


если трудно прочесть и понять что я написал - то вовсе не обязательно отвечать.

392
25 декабря 2012 года
cronya
421 / / 03.01.2009
А вам не кажется, что сдесь простой принцип ооп - инкапсуляция называется :) И идет беспричинный дебошь со стороны некоторых товарищей.
275
25 декабря 2012 года
pashulka
985 / / 19.09.2004
Цитата: UserNet2008
Видимость это на уровне кода, а не редактора. Все макросы показывает Word.



Дык, не обязательно освещать вопрос только на уровне видимости переменной/процедуры и т.п. Можно упомянуть и пользователя.

Кстати, специально проверил в Word'е XP, там приватные макросы всё-таки не отображаются в списке макросов (Сервис - Макрос - Макросы) или мы опять говорим о разных вещах ;)

327
26 декабря 2012 года
UserNet2008
748 / / 03.04.2010
А Public ?
У меня Word 2010 вот
(Вид - Макрос - Макросы)



Объясните в деталях что и как я это сделаю на 2010 или 2007
275
26 декабря 2012 года
pashulka
985 / / 19.09.2004
А Вы введите слово Private перед TC и посмотрите повторно.

P.S. К слову сказать, вот здесь можно найти выдержку из справки, касательно инструкции Sub (это на случай, ежели кто захочет более подробно ознакомиться с данным вопросом. да, и справка на русском)
327
26 декабря 2012 года
UserNet2008
748 / / 03.04.2010
Я понял речь шла VB Applications, а я с упорством пня про VB .NET
Цитата:
А Вы введите слово Private перед TC и посмотрите повторно.


Теперь (Вид - Макрос - Макросы) пусто, Значит Public Sub() и Sub() одно и тоже?
Я всегда полагал, что Private Sub () и Sub () это есть одно и тоже
Либо в VBA по умолчанию Sub as Public не понятный аспект с Sub
Так же не понятно

Цитата:
Если модуль же объявлен как приватный (Private Sub)


Может так -- Если в модуле объявлена Private Sub -- далее по тексту
Иначе как объявить модуль Private и зачем ?

275
26 декабря 2012 года
pashulka
985 / / 19.09.2004
Цитата: UserNet2008
Я понял речь шла VB Applications, а я с упорством пня про VB .NET



Бывает

Цитата: UserNet2008
Значит Public Sub() и Sub() одно и тоже?



Таки да,
и об этом факте явно говорится в опубликованной мною ранее ссылке, да и kot_ гутарил об энтом деле.

Цитата: UserNet2008
Так же не понятно
Цитата:
Если модуль же объявлен как приватный (Private Sub)


Может так -- Если в модуле объявлена Private Sub -- далее по тексту
Иначе как объявить модуль Private и зачем ?



Здесь Вы правы, возможно это очепятка, ибо термин модуль лучше заменить на макрос/процедура.

Впрочем, об'явить весь модуль личным также возможно :

Инструкция Option Private

При использовании в главном приложении, допускающем взаимные ссылки из разных проектов, инструкция Option Private Module позволяет запретить ссылки на содержимое модуля извне проекта. В главных приложениях, не допускающих такие ссылки, например в автономной версии Visual Basic, инструкция Option Private не имеет последствий.

Синтаксис

Option Private Module

Дополнительные сведения

Инструкция Option Private при ее использовании должна находиться на уровне модуля перед любой процедурой.

Когда модуль содержит инструкцию Option Private Module, общие элементы, например, переменные, объекты и определяемые пользователем типы, описанные на уровне модуля, остаются доступными внутри проекта, содержащего этот модуль, но недоступными для других приложений или проектов.

Примечание. Инструкция Option Private полезна только для главных приложений, которые поддерживают одновременную загрузку нескольких проектов и позволяют ссылки между загруженными проектами. Например, Microsoft Excel поддерживает загрузку нескольких проектов. В этом случае инструкция Option Private Module позволяет ограничить взаимную видимость проектов. Хотя Visual Basic допускает загрузку нескольких проектов, взаимные ссылки между проектами Visual Basic не разрешены.

Пример использования инструкции Option Private

В данном примере инструкция Option Private используется на уровне модуля, чтобы указать, что весь модуль является личным. После применения инструкции Option Private Module символы, определенные на уровне модуля и не объявленные личными (Private), будут доступны другим модулям в том же проекте, однако будут недоступны другим проектам и приложениям.

 
Код:
Option private Module   ' Объявляет модуль личным.
Справка © Microsoft Excel 97
327
27 декабря 2012 года
UserNet2008
748 / / 03.04.2010
pashulka Спасибо за труды!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог