【发布时间】:2015-02-19 21:41:14
【问题描述】:
伙计们。我是编程新手,但我正在编写一些宏来帮助管理我的工作共享 Excel 工作簿。
我正在为需要访问此工作簿的人员实施几个不同的用户角色。安全性不是很关键,只是为了防止人们意外地对他们不应该做的事情进行(和保存)更改。我只是有一个用户窗体提示输入密码,并根据输入的内容授予适当的访问权限。
我已将其写入,以便用户在 UserForm 上的文本框中输入直接引用为 Me.textboxPasswordEntry.Value 以进行任何比较。我突然想到这可能不是最佳实践,但我无法说明原因。也许我只是想多了?同时,声明一个变量,将值传递给变量,然后进行分析,这似乎很愚蠢和浪费。
下面的 Sub 来自用户窗体,我将其包含在内是为了向您展示我的意思。这是一个非常直接的场景,我知道,但是如果我通过更复杂的练习继续这种练习,我是否会遇到麻烦?如果是这样,我可能会遇到什么样的问题?
谢谢。
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
【问题讨论】:
-
一般来说,使用变量来表示在过程中被多次引用的对象/值。在这种情况下,我不会将其更改为变量。当一个变量在一个过程中被多次使用时,更改赋值通常比定位和更改对它的每个引用更容易。例如,如果有人更改了您的 UI 设计并将控件重命名为
password_tbox,您只需在一处更改即可。 -
@DavidZemens,我在回顾这个问题时才意识到我忘了感谢您的回复。我的想法和你的一样,所以作为一个新手,能够得到确认并让那些挥之不去的疑问(有点)平静下来,这让我很放心。