Значение оператора :=

Программирование на Visual Basic for Applications
Dimi
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 18.07.2007 (Ср) 8:21

Значение оператора :=

Сообщение Dimi » 23.07.2007 (Пн) 13:09

Здравствуйте!

Подскажите, пожалуйста, что означает оператор := и в каких случаях он используется.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.07.2007 (Пн) 13:16

Он означает то же, что и =, и используется для именованных параметров. Текст слева от оператора означает название аргумента, к которому он относится.
Lasciate ogni speranza, voi ch'entrate.

MYF
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 12.05.2006 (Пт) 6:38
Откуда: Череповец

Сообщение MYF » 18.08.2007 (Сб) 19:14

Dimi, спасибо, что спросил, а то я всё как-то не решался.
Вообще-то оператор := называется "присвоить". И, как писал alibek, в VBA, вроде как, то же самое, что и =.
Хотя я (хоть и давно пишу на VBA) вот чего до сих пор не пойму. Почему в одних случаях параметры передаются процедуре в скобках, а в других - без скобок как A:=10, B:=20? Часто приходиться делать методом "научного тыка". Не пошло в скобках - переделаем по-другому...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.08.2007 (Сб) 19:23

MYF писал(а):Вообще-то оператор := называется "присвоить".

Нет. Он называется "передать параметр по имени".
Ничего никуда им не присваивается.

MYF писал(а):И, как писал alibek, в VBA, вроде как, то же самое, что и =.

Никакой связи между ними нет.

MYF писал(а):Хотя я (хоть и давно пишу на VBA) вот чего до сих пор не пойму. Почему в одних случаях параметры передаются процедуре в скобках, а в других - без скобок как A:=10, B:=20? Часто приходиться делать методом "научного тыка". Не пошло в скобках - переделаем по-другому...

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

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 24.08.2007 (Пт) 22:17

Э, рискну вставить слово:
Параметры принято передавать по порядку их перечисления, причем сначала обязательные, потом опциональные. Часто так бывает, что функция имеет массу опциональных (т.е. возможных, но не обязательных) параметров, и не имеет смысла перечислять их все при ее вызове, если нужно изменить лишь последний, вот тогда и используют ParamName := ParamValue, объясняю на примере:
можно вызвать MsgBox так:
MsgBox "Message", vbOKOnly, "MyTitle" 'здесь все попорядку
MsgBox Title:="MyTitle", prompt:="Message" 'А здесь уже нет

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

Что касается вызова со скобками и без:
1. Если ожидается, что функция или свойство должны что-то вернуть, то их параметры идут в скобках и в операторе присвоения они находятся справа от него(=)
Код: Выделить всё
Dim R As VbMsgBoxResult
R = MsgBox("Message", vbYesNo, "MyTitle")

2. Если что-то присваивается свойству, которое имеет несколько параметров , они записываются в скобках
Код: Выделить всё
Obj.Property(1, 2, 3) = 4

3. Если же процедура ни есть функция и ничего не возвращает, а просто вызывается (или она метод), то парметры к ней записываются без скобок
Код: Выделить всё
MsgBox "Message", vbYesNo, "MyTitle"

4. Если же процедура вызывается через Call то параметры идут в скобках
Код: Выделить всё
Call MsgBox("Message", vbYesNo, "MyTitle")

5. Если функция возвращает значение для параметра другой функции или процедуры, то параметры первой записываются в скобках
Код: Выделить всё
MsgBox String$(50,255), vbYesNo, "MyTitle"


Вот, маленькое FAQ, если что не так - исправляйте, если не дописал - добавляйте
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 111

    TopList