Разное

Vba процедуры: Создание процедуры (VBA) | Microsoft Learn

Создание процедуры (VBA) | Microsoft Learn

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья

Код в модуле упорядочен в виде процедур. Процедуры сообщают приложению, как следует выполнять ту или иную конкретную задачу. Используйте процедуры, чтобы разбить сложные задачи кода на более управляемые блоки.

Создание процедуры посредством написания кода

  1. Откройте модуль, для которого хотите создать процедуру.

  2. Можно создать процедуру Sub, Function или Property .

  3. Введите Sub, Function или Property. Нажмите клавишу F1, чтобы получить справку по синтаксису, если это необходимо.

  4. Введите код процедуры. Visual Basic завершает процедуру соответствующим оператором End Sub, End Function или End Property .

Создание процедуры с помощью диалогового окна Вставка процедуры

  1. Откройте модуль, для которого хотите создать процедуру.

  2. В меню Вставка выберите пункт Процедура.

  3. Введите имя процедуры в поле Имя диалогового окна Добавить процедуру.

  4. Выберите тип процедуры, которую вы хотите создать: Sub, Function или Property.

  5. Задайте область процедуры как Public или Private.

  6. Вы можете выбрать значение Все локальные переменные как статические, чтобы добавить ключевое словоStatic в определение процедуры.

  7. Нажмите кнопку ОК.

  • Практические руководства по Visual Basic

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

VBA Подпрограмма-функция — Mini-Soft.ru

VBA содержит встроенные или стандартные функции, например, sqr, cos или chr. (l — k) Next toint = i End Function

Как и процедура Sub, процедура Function является самостоятельной и может принимать параметры, выполнять ряд операторов и изменять значения своих параметров. В отличие от процедуры Sub, имя процедуры Function может возвращать значение в вызывающую процедуру. Существуют три различия между процедурами Sub и Function:

 Возвращаемое процедурой Function значение присваивается самому имени <имя процедуры> процедуры. Возвращаемое процедурой Function значение можно использовать в выражениях в программе.

 Как и переменные процедуры Function имеют тип, который определяет тип возвращаемого значения. (В отсутствие ключевого слова As в операторе определения процедуры ей назначается по умолчанию тип variant.)

 Вызов процедуры Function, или просто функции, в основном осуществляется заданием ее имени и параметров в правой части большого оператора или в составе выражения. 2)

End Function

В VBA процедура Function вызывается точно так же, как и любая встроенная функция:

strX = Hypotenuse(Width, Height)

Вызов процедур Function

Если функция не имеет аргументов, скобки после имени функции можно не ставить:

‘Все эти операторы вызывают не имеющую аргументов процедуру Function ToDec.


Debug.Print 10 * ToDec 
	X = ToDec
	If ToDec =10 Then Debug. Print "Out of Range" 
X = AnotherFunction(10 * ToDec)

Обычно вызов пользовательской функции (нестандартной функции, написанной программистом) аналогичен вызову встроенной (стандартной) функции VBA, например Abs.

Функцию можно вызывать так же, как и процедуру sub.

‘Следующие операторы вызывают одну и ту же функцию:

Call Year(Now)

Year Now

Значение функции при ее вызове подобным образом игнорируется.

Механизмы передачи параметров.

Обычно процедуре для выполнения требуются некоторые исходные данные. Эти данные могут передаваться процедуре при помощи параметров процедуры. При этом различают формальные параметры, то есть описанные в заголовке процедуры и используемые в ее теле, и фактические — те, что были указаны при ее вызове. Заметим, что имена формальных и фактических параметров не обязаны совпадать.

Типы данных параметров

По умолчанию параметры процедур имеют тип variant. Можно объявлять для параметров и другие типы данных. Заметим, что если типы фактически передаваемых в функцию значений отличаются от типа формальных параметров, то происходит неявное преобразование типов, Поэтому рекомендуется описывать в заголовке функции типы ее формальных параметров, а при вызове функции проверять соответствие типов фактических и формальных параметров.

Передача параметров по значению

При передаче параметра по значению (by value) процедуре передается копия переменной, выступающей в качестве параметра процедуры. Если процедура изменяет значение параметра, это затрагивает только копию переменной, а не саму переменную. Значение переменной- оригинала в вызывающей процедуру программе сохраняется прежним.

Для передачи параметров по значению используется ключевое слово ByVal,. например:


Sub PostAccounts(ByVal intAcctNum as Integer) <операторы тела процедуры> End Sub

Фактические параметры, заданные константами, всегда передаются по значению.

Передача параметров по ссылке

Передача процедуре параметров по ссылке (by reference) открывает ей доступ к области памяти, где хранится содержимое переменной. В результате процедура может изменять значение переменной, являющейся ее параметром. По умолчанию в VBA все параметры передаются по ссылке.

Если задается тип данных параметра, передаваемого по ссылке, то передаваемый параметр должен содержать значение специфицированного типа данных. Можно обойти это правило, передавая процедуре в качестве параметра выражение. В этом случае VBA вычислит выражение и передаст его значение процедуре, преобразовав его в нужный тип, если это окажется возможным.

Проще всего представить переменную как выражение, заключив ее в круглые скобки. Например, чтобы передать процедуре целое число через строковый параметр, можно использовать следующий код:


Private Sub Form_Load()
Dim intX As Integer
intX = 12 * 3
ВызываемаяПроцедура(intX)
End Sub
Sub ВызываемаяПроцедура (Bar As String)
MsgBox Bar   'Значение переменной Bar - строка "36"
End Sub
Необязательные параметры
С помощью ключевого слова Optional в списке параметров можно задавать необязательные параметры 
(optional arguments) процедуры. Если какой-то аргумент задан как необязательный, 
то и все последующие аргументы в списке аргументов должны быть необязательными и объявляются с ключевым словом optional. 
В этом коде все аргументы не являются обязательными:
Dim strИмя As String
Dim strАдрес As String
Sub Text(Optional x As String, Optional y As String)
MsgBox x
MsgBox y
End Sub
Private Sub Exec()
strИмя = "ВашеИмя"
strАдрес = 12345   ' Передаются два параметра.
Call Text(strИмя, strАдрес) End Sub В этом коде некоторые аргументы обязательны: Dim strИмя As String Dim varАдрес As Variant Sub Text(x As String, Optional у As Variant) MsgBox x If Not IsMissing(y) Then MsgBox y End If End Sub Private Sub Exec() strИмя = "ВашеИмя" ' Второй параметр не передается. Call Text(strИмя) End Sub

Если необязательный параметр отсутствует, то он рассматривается как параметр с типом variant, имеющий значение Empty. В предыдущем при мере показано, как с помощью функции IsMissing проверять необязательные параметры.

Значения по умолчанию для необязательных параметров

В следующем примере процедура возвращает значение по умолчанию необязательного параметра, если при ее вызове он опущен:


Sub ListText (x As String, Optional у As Integer = 12345) 
MsgBox x
MsgBox y
End Sub
Private Sub Exec()
strName = "yourname"   ' Второй параметр не передается.  
Call Text (strName)   ' Добавляет "yourname" and "12345".
End Sub

Неизвестное число параметров

Обычно при вызове процедуры число ее параметров должно быть точно таким же, как и при ее объявлении. Ключевое слово РaramArray «разрешает» процедуре принимать произвольное число параметров. Приведем пример:


Dim x As Integer Dim у As Integer Dim intSum As Integer
Sub Sum(ParamArray intNums())
For Each x In intNums 
у = у + x
Next x
intSum = у 
End Sub
Private Sub Exec()
Sum 1, 3, 5, 7, 8
MsgBox intSum 
End Sub

Рекурсия

. Под рекурсией понимают способность программы вызывать саму себя. Процедуры выделяют для хранения переменных ограниченный объем памяти в стеке. Стек — это рабочая область памяти, которая заполняется и освобождается динамически в соответствии с потребностями выполняемой программы. При каждом вызове процедурой самой себя выделяется дополнительный объем этой памяти. Процедура, вызывающая сама себя, называется рекурсивной. Рекурсивная процедура, которая бесконечно вызывает саму себя, приводит к ошибке. Например:


Function RunOut(Maximum)
	RunOut = RunOut(Maximum)
End Function

Эта ошибка менее очевидна, если две процедуры бесконечное число раз вызывают друг друга, или некоторое условие, ограничивающее рекурсию, никогда не выполняется. Рекурсия имеет свои области применения. Например, следующая процедура использует рекурсию для вычисления факториалов:


Function Factorial (N)
	If N <= 1 Then	' Достигнут конец рекурсивных вызовов.
Factorial = 1	' (N = 0) завершение вызовов.
	Else	' Повторный вызов функции, если N > 0.
	Factorial = Factorial(N - 1) * N
	End If
End Function

Необходимо проверить, что рекурсивная функция не вызывает себя столько раз, что начинает сказываться нехватка памяти. При возникновении ошибки, убедитесь, что процедура не вызывает себя бесконечное число раз. После этого попробуйте сэкономить память с помощью:

 устранения ненужных переменных;

 использования типов данных , отличных от Variant;

 переосмысления логики процедуры. Часто вместо рекурсии можно воспользоваться вложенными циклами.

Создание пользовательской функции на VBA в среде EXCEL. Любая процедура и функция, содержащиеся в общем модуле (но не в модуле формы и не в модуле класса), могут быть использована на рабочем листе Excel. Для выполнения процедур используется команда меню Сервис/Макрос/Макросы, а для вставки функций применяется команда меню Вставка/Функция или кнопка стандартной панели инструментов Вставка функции. При вставке функции запускается мастер функций, и если в проекте VBA имеется хотя бы одна функция, то в правом окне мастера функций появляется категория Определенные пользователем. При выборе этой категории в левом окне мастера функций отображается перечень функций проекта VBA. После выбора необходимой функции из списка, мастер функций предлагает ввести ее параметры, количество которых определено в ее заголовке. Если функция имеет необязательные параметры, или их число не определено, то мастер функций будет открывать окна для их ввода последовательно, по мере заполнения ранее открытых, как это происходит, например, при вставке функции рабочего листа СУММ. Значения параметров можно ввести с клавиатуры, либо можно ввести адрес ячейки, содержащей значение, либо можно указать ячейку с параметром, щелкнув по ней правой кнопкой мыши. Заметим, что ввод в качестве параметра диапазона ячеек допустим лишь в том случае, когда функция имеет неопределенное количество параметров, либо вводимый параметр представляет собой массив, либо он имеет объектовый тип данных Range.

В качестве примера перепишем в виде функции процедуру замены букв «А», «Б», «В» на цифры 1, 2, 3 соответственно (пример 6):


Function пример11(s As String)
Dim sn As String, t As String
Dim l As Integer, i As Integer
l = Len(s)
For i = 1 To l
t = Mid(s, i, 1)
Select Case t
Case "А": sn = sn + "1"
Case "Б": sn = sn + "2"
Case "В": sn = sn + "3"
Case Else: sn = sn + t
End Select
Next i
пример11 = sn
End Function

Отметим, что поскольку функция не может быть выполнена непосредственно, а должна быть вызвана, то для ее отладки (например, в пошаговом режиме) необходимо написать процедуру, обеспечивающую ввод параметров функции, ее вызов и вывод результата работы функции. Если функция возвращает более одного значения (используя список формальных параметров), то эти значения не могут быть выведены на рабочий лист с помощью мастера функций.

Создать процедуру (VBA) | Microsoft Узнайте

Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья

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

Чтобы создать процедуру, напишите код

  1. Откройте модуль, для которого вы хотите написать процедуру.

  2. Вы можете создать процедуру Sub , Function или Property .

  3. Тип Sub , Функция или Свойство . Нажмите F1, чтобы получить справку по синтаксису, если это необходимо.

  4. Введите код процедуры. Visual Basic завершает процедуру соответствующим End Sub , End Function или End Property оператор.

Чтобы создать процедуру с помощью диалогового окна «Вставить процедуру»

  1. Откройте модуль, для которого вы хотите написать процедуру.

  2. В меню Вставить выберите Процедура .

  3. Введите имя процедуры в поле Имя диалогового окна Вставить процедуру .

  4. Выберите тип создаваемой процедуры: Sub , Function или Property .

  5. Установите для процедуры значение Public или Private.

  6. Можно выбрать Все локальные переменные как статические , чтобы добавить ключевое слово Static в определение процедуры.

  7. Нажмите OK .

  • Практические руководства по Visual Basic

Поддержка и отзывы

У вас есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.

Подпроцедура VBA — Автоматизация Excel

В этой статье

  • Что такое подпроцедуры?
  • Создание подпроцедуры с помощью средства записи макросов
  • Создание подпроцедуры в окне VBE
  • Вызов подпроцедуры из другой подпроцедуры
  • Добавление аргумента в подпроцедуру
  • Назначение кнопки в Excel подпроцедуре
  • Создание функции для возврата значения

В этом руководстве объясняется, как использовать VBA Sub Процедуры в Excel.

Что такое подпроцедуры?

Подпроцедуры являются одним из основных краеугольных камней VBA. Подпроцедура делает что-то. Они выполняют такие действия, как форматирование таблицы или создание сводной таблицы. Большинство написанных процедур являются подпроцедурами. Все макросы являются подпроцедурами. Подпроцедура начинается с оператора Sub и заканчивается оператором End Sub. За именем процедуры всегда следуют круглые скобки.

 Вспомогательные линии сетки ()
ActiveWindow.DisplayGridlines = False
End Sub 

Подпроцедура в VBA может быть создана с помощью средства записи макросов или непосредственно в редакторе Visual Basic (VBE).

Создание подпроцедуры с помощью средства записи макросов

В ленте выберите Вид > Макросы > Запись макроса.

ИЛИ

Разработчик > Visual Basic > Запись макроса

Примечание. Если вы не видите ленту разработчика, вам необходимо включить ее. Вы можете узнать, как это сделать здесь.

1) Введите имя макроса, а затем 2) Выберите место для сохранения макроса. Это может быть рабочая книга личных макросов, рабочая книга, которую вы сейчас редактируете, или полностью новая рабочая книга.

После того, как вы нажали «ОК», вы можете выполнить шаги, которые вы хотите в своем макросе (например, выделить ячейку жирным шрифтом, изменить цвет текста и т. д.), а затем нажать кнопку «Стоп» в нижней части экрана, чтобы остановить запись макроса.

Чтобы просмотреть свой макрос, в Лента , выберите Вид > Макросы > Просмотр макросов .

ИЛИ

Разработчик > Visual Basic > Макросы

Щелкните макрос в списке Имя макроса , а затем щелкните Редактировать .

Это откроет VBE и перенесет вас в код VBA.

 

Теперь для вашей рабочей книги автоматически создан проект VBA, а в рамках этого проекта также создан модуль (модуль 1). Подпроцедура (макрос) содержится в этом новом модуле с правой стороны.

Создание подпроцедуры в окне VBE

Чтобы создать новую процедуру, нам сначала нужно вставить модуль в наш проект VBA или убедиться, что вы щелкнули в модуле, в котором хотите сохранить процедуру. Чтобы вставить новый модуль в свой код, щелкните параметр Вставить в строке меню и щелкните Модуль . Или нажмите кнопку Вставить модуль , которую вы найдете на стандартной ленте. После того, как вы выбрали свой модуль, самый простой способ создать процедуру — ввести ее непосредственно в окно модуля. Если вы введете слово Sub, за которым следует имя процедуры, End Sub будет автоматически добавлено в код для вас. Кроме того, вы можете перейти к Вставьте > Процедура вместо этого: Появится следующее диалоговое окно:

  1. Введите имя вашей новой процедуры в поле имени – оно должно начинаться с буквы алфавита и может содержать буквы и цифры и быть не более 64. персонажи.
  2. У вас может быть подпроцедура , процедура Function или процедура Property. (Свойства используются в модулях класса и задают свойства для элементов управления ActiveX, которые вы могли создать). Чтобы создать подпроцедуру, убедитесь, что этот параметр выбран.
  3. Вы можете сделать область действия процедуры либо Public , либо Private . Если процедура общедоступная (по умолчанию), то ее могут использовать все модули проекта, а если процедура частная, ее сможет использовать только этот модуль.
  4. Вы можете объявить локальные переменные в этой процедуре как статические (это связано с областью действия переменной и делает локальную переменную уровня процедуры общедоступной для всего модуля). Мы не будем использовать этот вариант.

Когда вы введете все необходимые данные, нажмите OK .

Затем вы вводите код между операторами Sub и End Sub.

 Публичный дополнительный тест()
ActiveWindow.DisplayGridlines = Не ActiveWindow.DisplayGridlines
End Sub 

Приведенный выше код выключит линии сетки в активном окне, если они включены, но если они выключены, он включит их!

Вызов подпроцедуры из другой подпроцедуры

Часто мы пишем код, который затем можно многократно использовать в проекте VBA. Например, у нас может быть макрос, который форматирует ячейку — возможно, делает текст жирным и красным, а затем в другом макросе мы также хотим отформатировать ячейку, а также сделать некоторые другие вещи с ячейкой. Во второй процедуре мы можем ВЫЗВАТЬ первую процедуру, а затем продолжить наш дополнительный код.

Во-первых, мы создаем первую процедуру:

 Sub FormatCell () 
 ActiveCell.Font.Bold = True
 ActiveCell.Font.Color = vbRed
End Sub

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

 Sub AdditionalFormatCell()
 'вызов первой процедуры 
FormatCell 'добавить дополнительное форматирование
ActiveCell. Font.Italic = True
ActiveCell.Interior.Color = vbGreen
End Sub

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

Добавление аргумента в подпроцедуру

Мы можем дополнительно контролировать работу нашего кода, добавляя аргумент или аргументы в нашу подпроцедуру.

Рассмотрим следующее:

Наша подпроцедура TestFormat вызывает процедуру AdditionalFormatCell. Хотя у нас есть аргумент для этой процедуры, мы пометили ее как необязательную. Необязательный аргумент означает, что вам не нужно передавать значение в процедуру.

Из-за того, что мы не передаем значение, значение i будет равно нулю, поэтому вместо FormatCell будет вызвана процедура FormatCell2. Если бы мы передали значение i — если это значение равно 1, то вместо этого был бы вызван FormatCell.

Назначение кнопки в Excel подпроцедуре

После того, как мы создали макрос в Excel VBA, мы можем создать кнопку на рабочем листе для запуска макроса. Для этого нам нужно включить вкладку «Разработчик».

В ленте выберите Developer > Insert > Form Controls > Button .

Нажмите и перетащите на рабочий лист, чтобы создать кнопку. Как только вы отпустите кнопку мыши, появится диалоговое окно назначения макроса.

Выберите макрос, который вы хотите назначить кнопке, и нажмите OK.

Щелкните правой кнопкой мыши на кнопке и выберите Редактировать текст , чтобы изменить текст на кнопке.

Нажмите кнопку, чтобы запустить макрос.

Программирование на VBA стало проще

Прекратить поиск кода VBA в сети. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области программирования и множеством функций, позволяющих сэкономить время для всех пользователей!

Узнать больше

Создание функции для возврата значения

Процедура-функция отличается от подпроцедуры тем, что она возвращает значение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *