Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

чем отличается Function от Sub? (В VBA)

Владимир Пекин Профи (809), закрыт 16 лет назад
сабж и если можно, поподробнее
Лучший ответ
User UserOFF Мастер (1323) 16 лет назад
Function - функция, должна возвращать какое-либо значение в результате своей работы (например, Add(a1,a2) as Interger, возвращающая результат сложения)
Sub - процедура, та же функция, которая ничего не возвращает ( например, Print( s as string) - просто выведет на печать, при этом ничего не вернув в место, откуда она вызывалась)
Остальные ответы
DigitalMacros Профи (950) 16 лет назад
В VBA, как и в других современных языках программирования, есть понятие процедур и функций, иначе называемых подпрограммами.
1. Основные понятия
Программа – это набор инструкций, записанных в определенной последовательности, согласно правилам языка программирования, приводящий к поочередному преобразованию входных данных с целью получения результата.
В широком смысле под программой понимают набор инструкций (команд) , записанный на языке понятном исполнителю.

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

Подпрограмма – это программа, которая запускается на выполнение из какой-то другой (не обязательно основной) программы.
Все подпрограммы делятся на процедуры и функции.

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

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

2. Вызов процедуры происходит так же, как и вызов любой команды VBA, – путем указания ее названия и передаче ей соответствующих значений переменных:
Например:
Sub Main()
Dim a As Integer
а = 1
adding a, 3
MsgBox a
End Sub
Sub adding (b As Integer, с As Integer)
b = b + с
End Sub
В этом примере из процедуры Main вызывается процедура adding, которой передаются два параметра – а (равное 1) и второй – число 3. Процедура adding увеличивает первую переданную переменную на значение второго переданного числа, а затем Main отображает результат вычислений.
Переменные могут передаваться в процедуру двумя способами – только для чтения или для чтения и для изменения. По умолчанию переменные могут в функции изменяться.
Как, скажем, в вышеприведенном примере – переменная «а» была передана в процедуру и там изменилась, и затем в исходной программе она тоже стала иметь новое измененное значение.
Если же не нужно, чтобы переменная после выполнения процедуры менялась в основной программе (скажем, процедура использует переменную для каких-то своих нужд, не связанных с исходной программой) , то перед именем этой переменной в заголовке процедуры следует поместить инструкцию ByVal. Тогда процедура просто использует переменную так, как в этой процедуре описано, возможно, изменив ее значение, а программа, вызвавшая процедуру, дальше будет работать с прежним значением переменной.
Sub Main()
Dim a As Integer
a = 1
adding a, 3
MsgBox a
End Sub
Sub adding (ByVal b As Integer, с As Integer)
b = b + с
MsgBox b
End Sub
При выполнении программы Main никакого увеличения переменной «а» не произойдет, и программа отобразит в качестве результата 1.
Однако в процедуре adding соответствующая переменная увеличится на 3, и команда MsgBox b отобразит ее значение, равное 4.

3. Функция отличается от процедуры тем, что она возвращает определенное значение, которое может быть использовано в дальнейшей работе программы.
Sub Main()
Dim a As Integer
Dim d As Integer
a = 1
d = adding (a, 3)
MsgBox d
End Sub
Function adding (ByVal b As Integer, ByVal с As Integer) As Integer
adding = b + с
End Function
Основная программа присваивает переменной «d» значение, вычисленное функцией.
СМВинтовые Сваи, Производство и Монтаж. Заборы под ключ. Подъем домов и замена фундамента (374) 8 лет назад
масло масленое.
в первом примере мы видим что процедура изменила переменную, т. е. сработала как функция
Похожие вопросы