Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / передача параметра ByRef / 9 сообщений из 9, страница 1 из 1
22.10.2003, 15:10
    #32301596
передача параметра ByRef
Немного непонятен VBA
ByRef - это-же передача переменной по ссылке ?
Т.е. если передавать переменную ByRef и изменять её в вызываемой функции, в вызывающей функции она будет измененной ? Или я что-то не так понимаю

Почему вот этот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub sub_1()
    Dim a As Integer
    a =  1 
    sub_2 (a)
    MsgBox a
End Sub


sub sub_2(ByRef f_a As Integer)
    f_a =  5 
End sub


Выдает Msgbox 1 ?

С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
22.10.2003, 15:14
    #32301608
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача параметра ByRef
скобки убери
...
Рейтинг: 0 / 0
22.10.2003, 15:16
    #32301619
передача параметра ByRef
Спасибо, получилось
а почему скобки мешают (я просто VB не особо знаю)?

С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
22.10.2003, 15:17
    #32301620
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача параметра ByRef
т.е. вместо
sub_2 (a)
надо
sub_2 a
...
Рейтинг: 0 / 0
22.10.2003, 15:19
    #32301630
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача параметра ByRef
Потому что (а) - это значение выражения. Так же как а+0 или а*1.
...
Рейтинг: 0 / 0
22.10.2003, 15:21
    #32301632
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача параметра ByRef
При вызове процедуры (sub) скобки не нужны, поэтому когда пишешь (a) у тебя создается временная переменная, приводится еще небось к какому-нибудь непонятному типу, потом временная переменная передается в процедуру, там временная переменная меняется, а основная остается.
Это все равно что ты бы написал
Код: plaintext
1.
sub_2 ( 1 + 1 )
msgbox a

или даже
Код: plaintext
1.
sub_2 ( 1 + 1 )
msgbox ( 1 + 1 )
...
Рейтинг: 0 / 0
22.10.2003, 15:21
    #32301633
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача параметра ByRef
апаздал
...
Рейтинг: 0 / 0
22.10.2003, 15:22
    #32301635
передача параметра ByRef
спасибо, вроде понял
теперь пишу
Код: plaintext
1.
call sub_2(a)


С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
22.10.2003, 15:24
    #32301640
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача параметра ByRef
Да, все верно. Синтаксис выглядит так:

Call MySub(x, y)
MySub x, y
a = MyFun(x, y)

Все скобки кроме этих воспринимаются как часть самого параметра.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / передача параметра ByRef / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]