1 (изменено: Mik, 2018-11-11 15:56:48)

Тема: VBS: функция не возвращает значение

Доброго времени суток!
Никак не могу победить причину, по которой функция на VBS не возвращает присвоенное значение.
Может быть сказывается 7-ой рабочий день...
Задача такая: есть функция ReadKey для обхода веток реестра, нужно с ее помощью вернуть значение. Добавляю скобки, делаю присвоение значения, а результат "пусто". Как так?
Вот пример, как я это пытаюсь сделать (весь код не привожу, только изменения для возврата значения):


...
f = ReadKey ("Software\ODBC")
' в результате f пустое...
msgbox f
Function ReadKey(strKey)
	...
	' для примера строку "WScript.Echo "HKEY_CURRENT_USER\" & strKey & "\, параметр """ & Param & """ = " & Val" заменяю на:
	ReadKey = "HKEY_CURRENT_USER\" & strKey & "\, параметр """ & Param & """ = " & Val
	' Exit Function ' это тоже делал после ReadKey =  - толку ноль!
	...
End Function

Никогда еще с таким не сталкивался. Внутри функции все значения есть (не пустые), но при выходе из функции "пусто". Даже не знаю на что уже думать - требуется Ваша помощь.

2

Re: VBS: функция не возвращает значение

А то, что в функции заменено на "..." увидеть можно ?

Первое, что бросается в глаза - отсутствие входящих параметров "Param" и "Val" либо аналогичных переменных с заданным значением, созданных внутри функции.
Второе, думаю Вам не помешало бы в начале кода вставить "Option Explicit", если его там нет. Это как раз избавило бы Вас от поиска необъявленных переменных вручную.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: VBS: функция не возвращает значение

Всё, разобрался!
Оказывается проблема была во вложенности функции:

Function ReadKey(strKey)
	...
	For Each strSubKey In sNames
		ReadKey strKey & "\" & strSubKey 
	Next
	...
End Function

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

For Each strSubKey In sNames
	strResult = ReadKey(strKey & "\" & strSubKey)
	If strResult <> "" Then ReadKey = strResult
Next

Как-то так.

Xameleon пишет:

А то, что в функции заменено на "..." увидеть можно ?

Никогда не думал, что цитирование кода-примера на 50 строк с одноименного сайта, это допустимо, поэтому привел ссылку. Видимо, это была плохая идея...