当有人打开工作簿时,我有一个密码验证步骤。我有多个用户将访问此工作簿,并根据我已分配一个名为 user 的变量来识别他们中的哪些人正在使用它。
Public pwd, user As String
Public graccess As Integer
Private Sub workbook_open()
graccess = 0
Do
pwd = InputBox("Please provide your password", "Authentication")
If pwd = "access" Then
user = "GTS"
graccess = 1
ElseIf pwd = "enter" Then
user = "AP"
graccess = 1
Else
MsgBox ("failed to authenticate")
pwd = ""
graccess = 0
End If
Loop Until graccess = 1
End Sub
现在,当此用户开始处理Excel工作表时,我需要检查用户变量以检查哪个用户正在访问工作表。由于此代码现在将出现在* worksheet_change *事件中,因此它是一个不同的子例程,它将在前一个代码完成运行并且不再使用之后运行。
所以我的问题是 我无法在变量中看到用户,因为我的workbook_open事件结束且代码已停止运行? 我该怎么做才能确保变量不会失去它的价值?
感谢您的耐心:)
答案 0 :(得分:0)
两件事:
修复DIM的
Dim pwd as string,user as string
将DIM移至标准模块
答案 1 :(得分:0)
将当前用户名存储在工作簿中的Name
变量中。
首先,在wokrbook中添加Name
。从Formulas
功能区,执行以下操作:
这实际上是一个在运行时后仍然存在的“变量”。
在Workbook_Open
事件处理程序中,执行以下操作:
ActiveWorkbook.Names("username") = Environ("username")
这使用名为“username”的系统环境变量,这可能比询问用户名更好,因为无论是偶然还是恶意,都无法输入错误的名称。
或者,您可以使用InputBox
提示输入用户名:
ActiveWorkbook.Names("username") = Application.InputBox("Please enter your username", "Username", "enter your username")
或者,将Name
定义为字符串值的任何其他方法。
稍后,在您的任何代码模块或事件处理程序中,您始终可以返回Name
,然后以这种方式进行验证。