2

当有人打开工作簿时,我有一个密码验证步骤。我有多个用户将访问此工作簿,并且基于此我分配了一个名为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 事件已经结束并且代码已停止运行?我能做些什么来确保变量不会失去它的价值?

谢谢你的耐心:)

4

2 回答 2

0

将当前用户名存储在Name工作簿的变量中。

首先,将 a 添加Name到 wokrbook。从Formulas功能区,执行以下操作:

在此处输入图像描述

这本质上是一个在运行后仍然存在的“变量”。

在您的Workbook_Open事件处理程序中,执行以下操作:

ActiveWorkbook.Names("username") = Environ("username") 

这使用称为“用户名”的系统环境变量,这可能比询问用户名更可取,因为没有机会输入错误的名称,无论是意外还是恶意。

或者,您可以使用 anInputBox提示输入用户名:

ActiveWorkbook.Names("username") = Application.InputBox("Please enter your username", "Username", "enter your username")

或者,将 定义Name为字符串值的任何其他方法。

稍后,在您的任何代码模块或事件处理程序中,您总是可以参考然后以Name这种方式进行验证。

于 2013-09-06T13:47:21.680 回答
0

两件事情:

  1. 修复 DIM

    将 pwd 调暗为字符串,将用户调暗为字符串

  2. 将 DIM 移至标准模块

于 2013-09-06T13:32:12.383 回答