直接引用VBA中的用户表单条目而不是将值传递给variables

乡亲。 我是编程新手,但是我正在编写一些macros来帮助为我的工作pipe理共享的Excel工作簿。

我正在为需要访问此工作簿的人员实施几个不同的用户angular色。 安全并不是非常关键,只是为了防止人们意外地(而不是保存)改变他们不应该做的事情。 我只是有一个UserForm提示input密码,并根据input内容授予适当的访问权限。

我写它,以便用户input到用户窗体上的文本框被直接引用为Me.textboxPasswordEntry.Value进行任何比较。 我觉得这可能不是最好的做法,但我不能指责为什么。 也许我只是在想什么? 同时,声明一个variables,把variables传递给variables,然后分析variables,似乎是愚蠢和浪费的。

下面的Sub是从UserForm,我已经包括它来向你展示我的意思。 我知道,这是一个非常直接的情况,但是如果我通过更复杂的方法继续这种做法,我是否在追求麻烦? 如果是这样,我会遇到什么样的问题?

谢谢。

 Private Sub buttonOK_adminPW_Click() 'The subs SetUserType_[level] are in the ChangeUserType module 'AdminPass and DesignPass are module-level variables set on UserForm initialization 'Default user type is User. Read-only access. 'Admins can edit the workbook, but must save via a macro to ensure ' things are reset properly for Users (some sheets hidden, etc.) 'Designers can edit the workbook, but also have full ability to save using ' the regular file menu/ctrl+s/etc. Application.ScreenUpdating = False Select Case Me.textboxPasswordEntry.Value Case AdminPass 'Shows right control buttons and unlocks the wkbk for admin access SetUserType_admin Unload Me Case DesignPass 'Shows all control buttons and unlocks the wkbk for designer access SetUserType_design Unload Me Case Else MsgBox ("Password incorrect. Please retry.") With Me.textboxPasswordEntry .Value = "" .SetFocus End With End Select Application.ScreenUpdating = True End Sub 

是的,我也考虑过用户forms多年来的“最佳做法”…我想这只是通过经验,我经常使用下面的方法:

  1. 在用户表单中使用尽可能less的代码(想象的是,如果表单更加“可重用”,如果它尽可能less地返回到父表单),其存在的原因只是为了获得input)
  2. 在表单的“激活”事件上使用代码来清除表单上的所有字段(这是有意义的forms,因为那样你就不需要记住表单上的每一个控件来清除你使用的每一个点它)
  3. 直接引用您的调用代码中的窗体中的对象(即stPassword = userform1.tbPassword.value)或…
  4. 在用户窗体中使用“公共”variables…即在用户窗体中的所有代码声明“public stPasswordInput as string”之前,那么你可以在你的调用代码中引用例如stPassword = userform1.stPasswordInput

我很想看看其他人的build议!