2015-03-20 2 views
1

Я пытаюсь запустить код, чтобы проверить, зарегистрирован ли пользователь на сервере. Если пользователь регистрируется, то общедоступная переменная loggedIn = true. Это значение должно быть сохранено, чтобы пользователь мог использовать мою пользовательскую функцию.Публичные и статические переменные

псевдокод:

Public loggedIn as boolean 

Sub check_if_is_logged() 

    'Code to check if the user is logged 
    'if logged then loggedIn = true 

end sub 

function user_defined() 

    'check to see if it is logged 
    if loggedIn = false then 
Exit Function 

end function 

Но каждый раз, когда я запускаю код значение восходит к ложному, и я не могу использовать эту функцию. Есть ли способ объявить публичную и статическую переменную одновременно?

ответ

1

Функция user_defined всегда будет возвращать False независимо от того, является ли переменная loggedIn является True или False, если функция не объявляет возвращаемое значение. Таким образом, это приведет к возникновению внешнего вида, что общая переменная loggedIn не сохраняется по желанию/ожиданию. Я подозреваю, что если вы отлаживаете свой код и проходите через него, вы заметите, что это так: loggedIn правильно - True, но функция user_defined не возвращает значение правильно.

Это, видимо, работает для меня

Public loggedIn As Boolean 

Sub check_if_is_logged() 

    loggedIn = True 

End Sub 

Function user_defined() 
    Dim ret As Boolean 

    If loggedIn Then ret = True 

    user_defined = ret 
End Function 

В loggedIn процедуры я просто предположим, что пользователь вошел в систему (конечно, вы бы логику, которая определяет, является ли истина или ложь).

Затем, если я запрошу функцию user_defined, сделав ?user_defined в ближайшем окне, результатом будет True.

Значение loggedIn делает не Возврат к False.

Если вы заметили что-то другое, то проверьте свою логику, которая может быть ошибочной, или, возможно, вы что-то делаете с End runtime, которая устраняет общедоступные переменные.

Примечание: Это не будет сохраняться через End заявление (хотя оно должно сохраняться через End Sub, End Function, End Type, End Enum и т.д.). Это также не будет продолжаться после закрытия рабочей книги/и т. Д. Вам нужно будет сохранить значение в Name в книге или в коллекции CustomDocumentProperties.

+2

Я думаю, что ключом является то, что OP никогда не назначает возвращаемое значение 'user_function' до выхода функции. В этом случае он всегда будет возвращать то, что когда-либо было дефолтом, что кажется '0', или' False' – FreeMan

+0

@FreeMan правильно! функция 'user_defined' вернет' False', независимо от того, является ли переменная 'loggedIn'' True' или 'False', если функция не объявляет возвращаемое значение. Хороший улов. Таким образом, это может привести к * внешнему виду *, что публичная переменная 'loggedIn' не сохраняется по желанию/ожиданию. –

Смежные вопросы