powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не правильная передача параметров в процедуру и др.
3 сообщений из 3, страница 1 из 1
Не правильная передача параметров в процедуру и др.
    #33170259
sulfur2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста =(

'[глобальная, описана второй строкой в модуле, после Option Explicit]
Public strMask As String

вот объявление функции:
Sub Search_n_Mark(strMask As String, strCellValue As String, iOffset As Integer)

вот ее вызов в том же модуле:
'[локальные переменные для функции]
Dim ii As Integer
Dim strCellValue As String
Dim iOffset As Integer
'[вызов]
Search_n_Mark strMask = strMask, _
strCellValue = strCellValue, _
iOffset = ii

Вопрос1: почему когда я вызываю процедуру Search_n_Mark(strMask, strCellValue, ii) транслятор пишет(сразу после ввода, а не выполнения)
Compile error:
Expected: =
и ставит курсор в конец строки, после скобки. И выделяет красным всю строку вызова

Вопрос2: при пошаговом просмотре я выяснил, что когда выполняется процедура Search_n_Mark, то переменные почемуто приобретают такие значение
strMask = "True" (тип String!)
strCellValue = "True" (тип String!)
iOffset = 0 (тип Integer)
Однако при вызове я передавал в переменную strMask строку "sdfse", а strCellValue должно было стать пустой строкой ""(посмотрел в окне Watches). Почему получилось "True" в обоих случаях?
...
Рейтинг: 0 / 0
Не правильная передача параметров в процедуру и др.
    #33170319
Кошмар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компилятор Вашу вот эту строку кода:
Search_n_Mark strMask = strMask, strCellValue = strCellValue, iOffset = ii
понимает (и правильно делает) как:
Search_n_Mark (strMask = strMask), (strCellValue = strCellValue), (iOffset = ii)

В результате (ответ на Ваш второй вопрос) получается, что в процедуру Search_n_Mark передаются следующие параметры:
Search_n_Mark True (ведь strMask равно strMask, а значит Тру), True (ведь strCellValue равно strCellValue), False (ведь iOffset не равно ii)

То есть, в процедуру вы передавали не переменные, а результат сравнения двух переменных, который является будевой велечиной - либо равно, либо не равно.

Вызывать надо так:
'[локальные переменные для функции]
Dim ii As Integer
Dim strCellValue As String
'Dim iOffset As Integer ' - вот это лишнее! Или лишнее ii... сами смотрите...

'[инициализация переменных]
ii = значению, которое надо передать в процедуру
strCellValue = значению, которое надо передать в процедуру
strMask = значению, которое надо передать в процедуру

'[вызов]
Search_n_Mark strMask, strCellValue, ii

Имена переменных в данном коде могут быть какими угодно, т.е. они не обязаны соответствовать именам в вызываемой процедуре.

Вам бы обязательно почитать книжку по программированию (неважно на каком языке программирования). В частности, обратите внимание на разделы про вызов функций и процедур, передачу параметров по ссылке и по значению, возврат значения из функции и... самое главное... Про области видимости переменных. Тогда в вашем коде не будут возникать переменные буква-в-букву повторяющие какие-то левые переменные и не возникнут такие причудливые конструкции...
Удачи Вам на этом поприще!

З.Ы. Чуть глаза не выскочили! Надо ж более гуманно относиться к форумянам :) Даже не знаю, как Вас угораздило такое придумать...
З.Ы. Мое уважение автору за столь героические самостоятельные попытки! Без смеха...
...
Рейтинг: 0 / 0
Не правильная передача параметров в процедуру и др.
    #33177701
sulfur2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[QUOTE]Кошмар[/QUOTE], большое спасибо, все заработало :)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не правильная передача параметров в процедуру и др.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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