Private sub vba что это
Загружай VB, и в путь.При этом очень советуем иметь ПРОГРАММНЫЕ МИНИАТЮРЫ, которые можно заказать по aavov@yandex.ru.Они просто необходимы,когда придется читать текст повторно, без лирики. Итак, создаем первый “Стандартный EXE” (как в Главе 1). На экране имеем примерно такую картинку:
Теперь мы найдем место, куда будем заносить собственно программу. Для этого в верхнем ряду окна нажимаем кнопку “Вид”. В выпавшем меню первая строка и есть та, которая нам нужна: “Код”. Показано на рисунке 3.
У нас поверх окна формы Проект1 – Form1 (Форма) появится окно Проект1 – Form1 (Код). Вверху этого окна у нас имеется два выпадающих списка. Слева — список доступных объектов, справа – события для этих объектов. Объектов у нас сейчас два: (General) и Form. Выбираем строку Form. В поле окна кода появились две строки. Что это значит. Первая строка:
Private Sub Form_Load()
говорит о том, что мыначинаем подпрограмму (Private Sub) или правильней процедуру, которая будет выполняться при загрузке (_Load) нашей формы (Form). Загрузка — это возникающее событие, на которое и отреагирует эта процедура. Последняя строка
просто говорит о том, что этой строкой процедура Form_Load завершается.
Вот только выполнять-то пока нечего. В теле процедуры у нас нет ничего. А поэтому мы сейчас туда чего-нибудь напихаем. Первым делом, выведем на нашу форму какой-нибудь текст. По идиотской традиции, самая первая программа должна выводить на экран надпись типа “Hello, world” («Здравствуй, мир»). Мы же, из чувства противоречия, напишем “Я стану программистом”. Для этого вписываем между двух уже имеющихся у нас строк еще одну. У нас получится вот такая процедура:
Private Sub Form_Load()
Form1 .Print «Я стану программистом»
Строка, которую мы только что вписали в процедуру, представляет собой оператор, в котором первое слово Form1 представляет собой объект с которым мы работаем (не даром Visual Basic — это объектно-ориентированный язык). В нашем случае объект — это форма. Второе слово после точки (Print) представляет собой метод, который мы используем, для того чтобы работать с нашим объектом (формой). Наш метод позволит напечатать на объекте данные, которые следуют далее. Так как строка «Я стану программистом» — текстовая, то она взята в кавычки. Таковы правила языка Visual Basic — то бишь синтаксис.
Теперь можно бы посмотреть как это работает, только ни черта у нас не выйдет. Чтобы эта надпись появилась в форме, надо залезть в окно “Свойства – Form1”. На рис. 2 (см. выше) оно подписано как “Свойства выделенного объекта”. Затем в левой колонке найти строчку со свойством “AutoRedraw”. В этой строке только в правой колонке из выпадающего списка выбрать “True”. Теперь окно перерисуется вместе с нашим чудесным текстом и мы сможем увидеть изменения формы после выполнения программой нашего оператора. Нажмем кнопочку со стрелочкой для запуска нашей программы (показано на рис.4) и наслаждаемся ее работой.
Свойство перерисовки, как и всякое другое можно задавать программно. Это намного правильней, так как в ходе выполнения программы часто приходится менять свойства объектов. Перед нашей строчкой добавим еще одну:
Form1.AutoRedraw = True
А в свойствах формы вернем состояние свойства AutoRedraw с True (Истина) на False (Ложь). Запустим программу. Она работает совершенно также. Аналогично можно менять другие свойства формы. В дальнейшем по мере необходимости мы будем обращаться к ним.
Ясное дело, форму можно растягивать. Можно также менять ее положение на экране, двигая квадратик в окне “Размещение формы”.
Еще одно. Можно создавать несколько форм и управлять объектами одной из другой. Для этого в меню выберите “Проект – Добавить форму – Открыть”.
Только если после этого запустить программу, второй формы не увидишь. Чтобы сделать ее видимой, надо прописать в Form1 такой код:
Теперь наш проект надо сохранить. Выбери “Файл – Сохранить проект” или нажми на изображение дискетки. Появиться окно сохранения проекта, которое обычно предлагает путь «C:\Program Files\Microsoft Visual Studio\VB98». Но туда сохранять ни в коем случае не надо, иначе файлы твоего проекта перпутаются с файлами Visual Basic. Лучше создать отдельную папочку с названием, которое отражает суть проекта и сохранить проект в ней. Так надо поступать с каждым проектом. Мы будем сохранять файлы под теми же именами, которые предлагает VB, хотя их, конечно, можно задавать какие угодно.
Последний этап – создание выполняемого (т.е. EXE) файла, то ради чего мы это все делали. Нажми “Файл – Создать Проект1.exe…”, сохраняй и готово. Теперь ты можешь закрыть VB и запускать свой EXE-файл. Поздравляю! Ты создал первую программу на Visual Basic. Вариант этой программы, только несколько расширенный, я привожу ниже. В ней показано изменение некоторых свойств формы. Скопируй ее в тело подпрограммы и поэкспериментируй с ней. Обрати внимание на комментарии. Они выделяются зеленым цветом и пишутся после апострофа. Нужны они только для пояснений, не компилируются и программой не выполняются.
‘******вот некоторые возможности работы с формой*****
Private Sub Form_Load()
Form1.AutoRedraw = True ‘включает перерисовку формы 1
Form1.BackColor = vbBlack ‘меняет цвет формы 1 на черный
Form1.ForeColor = &HFF& ‘меняет цвет текста формы 1 на красный
Form1.BorderStyle = 3 ‘меняет рамку (бордюр) формы 1 на неизменяемую
Form1.Font.Size = 18 ‘меняет размер шрифта формы 1 на 18
Form1.Font.Underline = True ‘подчеркивает текст в форме 1
Form1.Caption = «Моя первая программа» ‘устанавливает заголовок формы 1
Form1. Print «Я стану программистом» ‘выводит текст на форму 1
Form2.Show ‘делает видимой форму 2
Form2.Width = 9000 ‘устанавливает ширину формы 2 равной 9000 твипов
Form2.WindowState = 1 ‘сворачивает форму 2
End Sub
Скачать код можно вверху страницы.
Объясните в чем разница
Объясните в чем разница между:
Sub
Private Sub
Public Sub
У нас прописанны макросы несколькими людьми, и каждый делает по-своему. И я заметил что некоторые макросы работают довольно странно. Главна странность в том, что при запуске некотрых макросов эксель открывает еще какой-нить файл.
1 ответ
18 февраля 2012 года
985 / / 19.09.2004
Инструкция Sub
Описывает имя, аргументы и текст программы, составляющий тело процедуры Sub.
[Private | Public] [Static] Sub имя [(списокАргументов)]
[инструкции]
[Exit Sub]
[инструкции]
End Sub
Синтаксис инструкции Sub содержит следующие элементы:
Элемент — Описание
Public — Необязательный. Указывает, что процедура Sub доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне проекта.
Private — Необязательный. Указывает, что процедура Sub доступна для других процедур только того модуля, в котором она описана.
Static — Необязательный. Указывает, что локальные переменные процедуры Sub сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static не действует на переменные, описанные вне процедуры Sub, даже если они используются в процедуре.
имя — Обязательный. Имя процедуры Sub, удовлетворяющее стандартным правилам именования переменных.
списокАргументов — Необязательный. Список переменных, представляющий аргументы, которые передаются в процедуру Sub при ее вызове. Имена переменных разделяются запятой.
инструкции — Необязательный. Любая группа инструкций, выполняемых в процедуре Sub.
Аргумент списокАргументов имеет следующий синтаксис и элементы:
[Optional] [ByVal | ByRef] [ParamArray] имяПеременной[( )] [As тип] [= поУмолчанию]
Элемент — Описание
Optional — Необязательный. Ключевое слово, указывающее, что аргумент не является обязательным. При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional. Все аргументы, описанные как Optional, должны иметь тип Variant. Не допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray.
ByVal — Необязательный. Указывает, что этот аргумент передается по значению.
ByRef — Необязательный. Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в Visual Basic по умолчанию.
ParamArray — Необязательный. Используется только в качестве последнего элемента в списке списокАргументов для указания, что конечным аргументом является описанный как Optional массив значений типа Variant. Ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами ByVal, ByRef или Optional.
имяПеременной — Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.
тип — Необязательный. Тип данных аргумента, переданного в процедуру; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant. Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип.
поУмолчанию — Необязательный. Любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.
Дополнительные сведения
Процедуры Sub, тип которых не указан явно с помощью слов Public или Private, являются общими по умолчанию. Если не используется слово Static, значения локальных переменных не сохраняются между вызовами процедур.
Внимание! Допускаются рекурсивные процедуры Sub; т.е. они могут вызывать сами себя для выполнения определенных задач. Однако рекурсия может приводить к переполнению стека. Ключевое слово Static обычно не используется с рекурсивными процедурами Sub
Все выполняемые команды должны содержаться в процедурах. Не допускается определение процедуры Sub внутри другой процедуры Sub, Function или Property.
Инструкция Exit Sub приводит к немедленному выходу из процедуры Sub. Выполнение программы продолжается с инструкции, следующей за инструкцией, содержащей вызов процедуры Sub. В любом месте процедуры Sub допускается наличие любого числа инструкций Exit Sub.
Подобно процедурам Function, процедура Sub является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов. Однако в отличие от процедуры Function, которая возвращает значение, процедура Sub не может применяться в выражении.
Процедура Sub вызывается в выражении по своему имени, за которым следует список аргументов в скобках. Для получения дополнительных сведений о вызовах процедур Sub см. описание инструкции Call.
Переменные, используемые в процедурах Sub, разбиваются на две категории: явно описанные внутри процедуры и не описанные внутри процедуры. Переменные, которые явно описаны в процедуре (с помощью ключевого слова Dim или эквивалентного ему), всегда являются локальными для этой процедуры. Переменные, которые используются, но явно не описаны в процедуре, также являются локальными, если они явно не описаны на более высоком уровне.
Внимание! В процедуре допускается использование переменной, которая явно не описана в этой процедуре, но при этом может возникать конфликт имен, если на уровне модуля был определен элемент с тем же самым именем. Если в процедуре содержится ссылка на неописанную переменную, имя которой совпадает с именем другой процедуры, константы или переменной, то подразумевается, что процедура ссылается на это имя на уровне модуля. Чтобы избежать возникновения конфликтов такого рода, следует пользоваться явным описанием переменных. Для включения обязательного явного описания переменных используется инструкция Option Explicit.
Примечание. Для входа или выхода из процедуры Sub нельзя использовать инструкции GoSub, GoTo или Return.
Справка © Microsoft Excel 97
P.S. Открытие других файлов может входить в задачу макроса, кроме того, макрос может изначально находиться в другой рабочей книге, в таком случае, при его вызове, рабочая книга, разумеется, откроется ()
Вложенные процедуры (Visual Basic)
Процедура Sub — это ряд операторов Visual Basic, заключенных в операторы Sub и End Sub . Процедура Sub выполняет задачу, а затем возвращает управление вызывающему коду, но не возвращает значение вызывающему коду.
При каждом вызове процедуры выполняются ее инструкции, начиная с первого исполняемого оператора после Sub оператора и заканчивая первым End Sub встречным оператором , Exit Sub или Return .
Процедуру Sub можно определить в модулях, классах и структурах. По умолчанию он имеет значение Public , то есть его можно вызывать из любого места в приложении с доступом к модулю, классу или структуре, в которой они определены. Термин метод описывает процедуру Sub или Function , доступ к которому осуществляется извне своего модуля, класса или структуры. Дополнительные сведения см. в разделе Procedures in Visual Basic (Процедуры в Visual Basic).
Процедура Sub может принимать аргументы, такие как константы, переменные или выражения, которые передаются ей вызывающим кодом.
Синтаксис объявления
Синтаксис объявления Sub процедуры выглядит следующим образом:
[modifiers] Sub SubName[(parameterList)] ' Statements of the Sub procedure. End Sub
Может modifiers указать уровень доступа и сведения о перегрузке, переопределении, совместном использовании и теневом режиме. Дополнительные сведения см. в разделе Sub Statement.
Объявление параметра
Каждый параметр процедуры объявляется аналогично объявлению переменной, указывая имя параметра и тип данных. Можно также указать механизм передачи и указать, является ли параметр необязательным или массивом параметров.
Синтаксис каждого параметра в списке параметров выглядит следующим образом:
[Optional] [ByVal | ByRef] [ParamArray] parameterName As DataType
Если параметр является необязательным, необходимо также указать значение по умолчанию в его объявлении. Синтаксис для указания значения по умолчанию выглядит следующим образом:
Optional [ByVal | ByRef] parameterName As DataType = defaultValue
Параметры в качестве локальных переменных
Когда элемент управления передается процедуре, каждый параметр обрабатывается как локальная переменная. Это означает, что его время существования совпадает с временем существования процедуры, а его область является всей процедурой.
Синтаксис вызова
Процедура вызывается явным Sub образом с помощью изолированной вызывающей инструкции. Вы не можете вызвать его, используя его имя в выражении. Необходимо указать значения для всех аргументов, которые не являются необязательными, а также заключить список аргументов в круглые скобки. Если аргументы не указаны, при необходимости можно опустить круглые скобки. Использование Call ключевое слово является необязательным, но не рекомендуется.
Синтаксис вызова Sub процедуры выглядит следующим образом:
[Call] SubName[(argumentlist)]
Метод можно вызвать Sub извне класса, который его определяет. Сначала необходимо использовать New ключевое слово для создания экземпляра класса или вызвать метод, возвращающий экземпляр класса . Дополнительные сведения см. в разделе Новый оператор. Затем можно использовать следующий синтаксис для вызова Sub метода в объекте экземпляра :
object.MethodName[(argumentList)]
Иллюстрация объявления и вызова
Sub Следующая процедура сообщает оператору компьютера, какую задачу будет выполнять приложение, а также отображает метку времени. Вместо того, чтобы дублировать этот код в начале каждой задачи, приложение просто вызывает tellOperator из различных расположений. Каждый вызов передает строку в аргументе task , которая идентифицирует запускаемую задачу.
Sub tellOperator(ByVal task As String) Dim stamp As Date stamp = TimeOfDay() MsgBox("Starting " & task & " at " & CStr(stamp)) End Sub
В следующем примере показан типичный вызов метода tellOperator .
tellOperator("file update")
См. также раздел
- Процедуры
- Процедуры функций
- Процедуры свойств
- Процедуры операторов
- Параметры и аргументы процедуры
- Оператор Sub
- Практическое руководство. Вызов процедуры, которая не возвращает значение
- Практическое руководство. Вызов обработчика событий в Visual Basic
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Оператор Sub
Объявляет имя, аргументы и код, формирующий текст процедурыSub.
Синтаксис
[ Частный | Общественного | Друг ] [ Static ] Subname [ ( arglist ) ]
[ операторы ]
[ Exit Sub ]
[ операторы ]
End Sub
Синтаксис оператора Sub состоит из следующих частей:
| Part | Описание |
|---|---|
| Public | Необязательный параметр. Показывает, что процедура Sub доступна всем другим процедурам во всех модулях. При использовании в модуле, содержащем оператор Option Private, процедура становится недоступной вне проекта. |
| Private | Необязательный параметр. Показывает, что процедура Sub доступна только другим процедурам из модуля, в котором она объявлена. |
| Friend | Необязательный параметр. Используется только в модуле класса. Показывает, что процедура Sub видима по всему проекту, кроме контроллера экземпляра объекта. |
| Static | Необязательный параметр. Показывает, что локальные переменные процедуры Sub сохраняются в промежутках между вызовами. Атрибут Static не влияет на переменные, объявленные вне процедуры Sub, даже если они используются в процедуре. |
| name | Обязательно. Имя процедуры Sub массива; должен соответствовать стандартным правилам именования переменных. |
| arglist | Необязательный параметр. Список переменных, представляющих аргументы, передаваемые в процедуру Sub при ее вызове. В качестве разделителя переменных используется запятая. |
| Операторы | Необязательный параметр. Любая группа операторов, выполняющихся внутри процедуры Sub. |
Аргумент arglist имеет следующий синтаксис и элементы:
[ Необязательно ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ] [ =defaultvalue ]
| Part | Описание |
|---|---|
| Необязательное | Необязательный параметр. Ключевое слово, которое указывает, что аргумент не является обязательным. Если используется, все последующие аргументы в списке ресурсов также должны быть необязательными и объявляться с помощью ключевого слова Optional . Optional не может использоваться для каких-либо аргументов, если используется ParamArray. |
| ByVal | Необязательный параметр. Указывает, что аргумент передается значением. |
| ByRef | Необязательный параметр. Указывает, что аргумент передается по ссылке. ByRef является значением по умолчанию в Visual Basic. |
| ParamArray | Необязательный параметр. Используется только в качестве последнего аргумента в списке ресурсов , чтобы указать, что окончательный аргумент является необязательныммассивом элементов Variant . Ключевое слово ParamArray позволяет предоставлять произвольное число аргументов. Ключевое слово ParamArray не может использоваться с аргументами ByVal, ByRef или Optional. |
| варнаме | Обязательно. Имя переменной, представляющее аргумент; соответствует стандарту соглашений об именовании переменных. |
| type | Необязательный параметр. Тип данных аргумента, передаваемого процедуре; Может быть byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только переменная длина), Object, Variant или определенный тип объекта. Если параметр не является Optional, может быть указан определяемый пользователем тип. |
| Defaultvalue | Необязательный параметр. Любая константа или константное выражение. Действительно только для параметров Optional. Если типом является Object, явным значением по умолчанию может быть только Nothing. |
Замечания
Если явно не указано с помощью public, private или Friend, процедуры Sub по умолчанию являются общедоступными.
Если static не используется, значение локальных переменных не сохраняется между вызовами.
Ключевое слово Friend может использоваться только в модулях классов. Однако доступ к процедурам Friend может осуществляться в любом модуле проекта. Процедура Friend не отображается в библиотеке типов своего родительского класса; процедура Friend не может быть привязана позднее.
Процедуры Sub могут быть рекурсивными, то есть вызывать сами себя для выполнения определенной задачи. Однако рекурсия может привести к переполнению стека. Как правило, ключевое слово Static не используется с рекурсивными процедурами Sub.
Весь исполняемый код должен находиться в процедурах. Процедуру Sub нельзя объявлять внутри другой процедуры Sub, Function или Property.
Ключевые слова Exit Sub вызывают мгновенный выход из процедуры Sub. Выполнение программы продолжается с оператора, следующего за вызовом процедуры Sub . В процедуре Sub можно использовать сколько угодно операторов Exit Sub.
Как и процедура Function, процедура Sub является отдельной процедурой, которая может принимать аргументы, выполнять последовательность операторов и менять значения своих аргументов. Но в отличие от процедуры Function, которая возвращает значение, процедуру Sub нельзя использовать в выражениях.
Вы вызываете процедуру Sub , используя имя процедуры, за которой следует список аргументов. Дополнительные сведения о вызове процедур Sub см. в инструкции Call.
Переменные, используемые в процедурах Sub, делятся на две категории: объявленные и не объявленные в явном виде внутри процедуры. Переменные, объявленные в явном виде внутри процедуры (с использованием инструкции Dim или ее аналогов) всегда являются локальными для процедуры. Переменные, которые используются, но не были явно объявлены в процедуре, также являются локальными, если они не были объявлены на более высоком уровне вне процедуры.
В процедуре могут использоваться переменные, не объявленные внутри нее в явном виде, однако если на уровне модуля объявлены переменные с такими же именами, может возникнуть конфликт имен. Если процедура ссылается на необъявленную переменную, имя которой совпадает с именем другой процедуры, предполагается, что она ссылается на имя из уровня модуля. Во избежание таких конфликтов рекомендуется объявлять переменные в явном виде. Используйте оператор Option Explicit для принудительного объявления переменных.
Операторы GoSub, GoTo или Return нельзя использовать для входа в процедуру Sub и выхода из нее.
Пример
В приведенном ниже примере оператор Sub используется для определения имени, аргументов и кода, формирующих тело процедуры Sub.
' Sub procedure definition. ' Sub procedure with two arguments. Sub SubComputeArea(Length, TheWidth) Dim Area As Double ' Declare local variable. If Length = 0 Or TheWidth = 0 Then ' If either argument = 0. Exit Sub ' Exit Sub immediately. End If Area = Length * TheWidth ' Calculate area of rectangle. Debug.Print Area ' Print Area to Debug window. End Sub
См. также
- Вызов процедур Sub и Function
- Общие сведения об именованных и необязательных аргументах
- Написание процедуры Sub
- Типы данных
- Операторы
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
