直接引用VBA中的userform条目,而不是将值传递给变量

时间:2015-02-19 21:41:14

标签: excel vba excel-vba

人。我是编程新手,但我正在编写一些宏来帮助管理我工作的共享Excel工作簿。

我正在为需要访问此工作簿的人实现一些不同的用户角色。安全性并不是非常关键,只是为了防止人们意外地(并保存)对他们不应该做的事情进行更改。我正在为密码提供UserForm提示,并根据输入的内容授予正确的访问权限。

我编写了这样的内容,以便用户在UserForm上进入文本框的条目直接引用为Me.textboxPasswordEntry.Value进行任何比较。我觉得这可能不是最好的做法,但我无法理解为什么。也许我只是在思考?同时,声明变量,将值传递给变量,然后分析变量似乎是愚蠢和浪费。

以下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

1 个答案:

答案 0 :(得分:1)

是的,我多年来一直在思考用户形式的“最佳实践”...我想只是通过经验,我最常使用以下方法:

  1. 在userform本身中使用尽可能少的代码(思考 是的,如果形式尽可能少,则表格更具“可重用性” 回到它的父母......它存在的原因只是为了获得输入)
  2. 使用表单“activate”事件上的代码清除所有内容 表单上的字段(因为这样才有意义 您不需要记住表单上的每个控件都要清除 你使用它的每一点)
  3. 直接引用来自的对象 您的呼叫代码中的表单(即stPassword = userform1.tbPassword.value)或...
  4. 使用“公共”变量 userform ...即在userform中的所有代码声明“public stPasswordInput as string”之前,您可以在您的调用代码中引用,例如stPassword = userform1.stPasswordInput
  5. 我很想看到其他人的建议!