powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / передача параметра ByRef
9 сообщений из 9, страница 1 из 1
передача параметра ByRef
    #32301596
Немного непонятен 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
передача параметра ByRef
    #32301608
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скобки убери
...
Рейтинг: 0 / 0
передача параметра ByRef
    #32301619
Спасибо, получилось
а почему скобки мешают (я просто VB не особо знаю)?

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

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


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

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

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


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