我应该如何存储一个variables,以便在Excel中使用不同的VBA代码调用?

当有人打开工作簿时,我有一个密码validation步骤。 我有多个用户将访问这个工作簿,并基于我已经分配一个variables称为用户,以确定谁在他们之间使用它。

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工作表上工作,我需要检查用户variables,以检查哪个用户正在访问工作表。 由于这个代码现在会出现在* worksheet_change *事件中,所以它是一个不同的子程序,它将在前面的代码运行完毕并且没有被使用之后运行。

所以我的问题是我无法看到variables中的用户,因为我的workbook_open事件结束,代码已经停止运行? 我能做些什么来确保variables不会失去它的价值?

感谢耐心:)

两件事情:

  1. 修理DIM的

    昏暗pwd作为string,用户作为string

  2. 将DIM移动到标准模块

将当前用户名存储在工作簿的Namevariables中。

首先,给wokrbook添加一个Name 。 从Formulasfunction区,执行以下操作:

在这里输入图像描述

这基本上是一个“variables”,在运行后仍然存在。

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

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

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

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

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

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

之后,在任何代码模块或事件处理程序中,您都可以始终引用该Name ,然后以此方式进行validation。