我应该如何存储变量,以便在excel中使用不同的VBA代码调用?

时间:2013-09-06 13:11:19

标签: excel vba excel-vba

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

感谢您的耐心:)

2 个答案:

答案 0 :(得分:0)

两件事:

  1. 修复DIM的

    Dim pwd as string,user as string

  2. 将DIM移至标准模块

答案 1 :(得分:0)

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

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

enter image description here

这实际上是一个在运行时后仍然存在的“变量”。

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

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

这使用名为“username”的系统环境变量,这可能比询问用户名更好,因为无论是偶然还是恶意,都无法输入错误的名称。

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

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

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

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