Получите доступ к забытым общественным ценностям сейчас
Access 2016, VBA; Я пытаюсь объявить публичную переменную (окно входа пользователя в систему), и она продолжает "забывать" переменную между функцией и form_load
Модуль:
Option Compare Database
Public vUser As String
Начальная форма:
Public Function fnUserID() As String
Set Wshnetwork = CreateObject("wscript.Network")
fnUserID = Wshnetwork.UserName
End Function
Public Function SetUserID()
vUser = fnUserID
End Function
Private Sub Form_Load()
Call SetUserID
txtBox.Value = vUser
End Sub
Теперь у меня есть этот точный код (те же имена и т. Д.), Работающий во второй базе данных Access. Что мне не хватает, что делает этот не работает правильно?
2 ответа
Он работает, как в тесте, и работает в другой форме.
Итак, воссоздайте оскорбительную форму. Каким-то образом текущий модуль кода может быть поврежден.
Сфера это сложная вещь, особенно если вы не используете Option Explicit
, Вы должны всегда использовать явные объявления и использовать Option Explicit
в верхней части всех модулей в VBA.
Вы можете явно обратиться к глобальной области видимости vUser
в этом модуле, настраивая свой код для использования ModuleName.vUser
:
Public Function fnUserID() As String
Set Wshnetwork = CreateObject("wscript.Network")
fnUserID = Wshnetwork.UserName
End Function
Public Function SetUserID()
Module1.vUser = fnUserID
End Function
Private Sub Form_Load()
Call SetUserID
txtBox.Value = Module1.vUser
End Sub
Популярные альтернативы:
- Используйте TempVar:
TempVars.vUser
, Преимущества включают возможность ссылаться на TempVar в запросах, выражениях форм и макросах. - Используйте предварительно объявленный класс. Преимущества включают отделение кода аутентификации от форм и облегчение расширения аутентификации.