我应该如何存储一个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不会失去它的价值?
感谢耐心:)
两件事情:
-
修理DIM的
昏暗pwd作为string,用户作为string
-
将DIM移动到标准模块
将当前用户名存储在工作簿的Name
variables中。
首先,给wokrbook添加一个Name
。 从Formulas
function区,执行以下操作:
这基本上是一个“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。