Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
orange3100
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 144
1

Совпадение в VBA? Не думаю

16.06.2016, 13:48. Просмотров 803. Ответов 3
Метки нет (Все метки)

И снова здравствуйте!
Вот такая история приключилась:
Ввожу код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Procedure18()
    Dim i As Integer
    i = 5
    Procedure19 i
    Debug.Print i
End Sub
 
Sub Procedure19(intInput As Integer)
    intInput = 12
End Sub
Immediate возвращает 12
Но стоит в строке 4 взять i в скобки
Visual Basic
1
Procedure19 (i)
Immediate возвращает 5. А вот в учебнике сказано что скобки ставить не обязательно (скрин прилагаю).
Кто подскажет может что это и как с этим дальше жить)))

ЗЫ: Книга Автоматизация Microsoft ACCESS с помощью VBA Майк Гандерлой
0
Миниатюры
Совпадение в VBA? Не думаю  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2016, 13:48
Ответы с готовыми решениями:

Сравнить каждый элемент с каждым, если есть совпадение, то соединить всю строку, в которой найдено совпадение
Доброго времени суток! Есть два массива строк разного размера (элементы массива разделены...

Правильно ли я думаю?
Лицензионный антивирус защищает компьютер лучше,жду ваших мнений!:friends:

думаю о переходе на qt
Скажите пожалуйста кто опытен: 1. Заметил на форуме harbahabr что переходят с Bilder C++ на Qt....

Я думаю вы не пойёмёте
не тя всё понимаю - но форму регистрации я не нашёл.

Думаю завелся вирус
1. При загрузке ПК до ввода пароля пользователя открывается непонятное пустое окно, в котором пока...

3
shanemac51
Модератор
Эксперт MS Access
8588 / 3293 / 502
Регистрация: 07.08.2010
Сообщений: 9,143
Записей в блоге: 2
16.06.2016, 14:12 2
ни разу не применяла Procedure19 (i) и никогда не меняла параметр в процедуре

Visual Basic
1
2
3
4
5
6
7
''применяла для процедур или функций без возвращения значения
call Procedure19 (i)
Procedure19 i
 
''если функция и возвращение значени
 
debug.print Procedure19 (i)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Procedure18()
    Dim i As Integer
    i = 5
    Procedure19 i
    Debug.Print "s1="; i
    i = 5
    Procedure19 (i)
    Debug.Print "s2="; i
    i = 5
    Debug.Print Procedure19f(i)
    Debug.Print "f="; i
''    s1 = 5
''s2 = 5
''
''f = 5
End Sub
 
Sub Procedure19(ByVal intInput As Integer)
    intInput = 12
End Sub
Function Procedure19f(ByVal intInput As Integer)
    intInput = 12
End Function
1
mobile
Эксперт MS Access
23740 / 13294 / 2807
Регистрация: 28.04.2012
Сообщений: 14,556
16.06.2016, 14:19 3
Лучший ответ Сообщение было отмечено orange3100 как решение

Решение

Процедура Sub не возвращает значения. Возвращает Function. Если записать Ваш код функцией, то возвратит правильное значение:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Procedure18()
    Dim i As Integer
    i = 5
    Procedure19 i
    Debug.Print i, Procedure19(i)
End Sub
 
Function Procedure19(intInput As Integer)
    Procedure19 = 12
End Sub
Обращение

Более того, не написав явно тип параметра (по ссылке или по значению) по умолчанию он стал по ссылке. И задав в процедуре значение входному параметру, Вы изменили его значение. Поэтому и передает 12. Обращение к процедуре Sub как функции не гарантирует правильного результата.

В скобках параметр передается когда от функции требуется результат: переменная=ИмяФункции(ИмяПараметра). Если же результат не требуется выдать наружу и нужно только исполнение команд внутри процедуры, то без скобок: имяПроцедуры ИмяПараметра

Добавлено через 31 секунду
Опоздал...
1
texnik-san
шапоклякистка 8-го дня
3631 / 2192 / 390
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
17.06.2016, 20:15 4
Цитата Сообщение от orange3100 Посмотреть сообщение
Но стоит в строке 4 взять i в скобки
Visual Basic
1
Procedure19 (i)
Immediate возвращает 5.
Данный синтаксис вызова процедуры скобок не требует. Поэтому бейсик интерпретировал (i) как выражение, которое нужно вычислить, и передал процедуре результат вычисления. А результат вычисления выражения - уже не переменная, а число. Числу ничего присвоить нельзя, так что на значение переменной вызов процедуры уже не повлиял.

Добавлено через 2 минуты
С таким же успехом можете вместо (i) передать 1*i

Visual Basic
1
Procedure19 1 * i
- тоже получите 5 в результате.
0
17.06.2016, 20:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2016, 20:15

robots - правильно думаю?
Здравствуйте, есть страницы: ...

думаю легкие задания=)
Помогите решить,я неособо силен ,коечто накидал но нуждаюсь в помощи 1.Скласти опис класу для...

Я правильно думаю о ObservableCollection ?
Добрый день. Хочу убедится, что думаю правильно. Вот есть у меня форма с DataGrid, в котором я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru