我在几个工作簿模板中有一个VBA脚本,用于解锁当前(活动)工作表。我使用相同的热键,以便允许使用宏的用户不必记住哪个热键允许他们解锁工作簿。
这通常不会引起头痛,因为大多数用户一次不打开多个工作簿(并且很可能无论如何都不使用热键)。问题是如果我打开了多个工作簿并尝试使用热键运行VBA脚本,我目前正在获取VBA脚本的随机实例。这会导致问题,因为密码确实在工作簿之间有所不同,因此如果热键在WB X中启动VBA脚本并且我在WB Y中启动,则会出现错误。
说实话,有没有办法让它能够使热键上的活动工作簿中的VBA脚本使用?
Per Alter的请求是我的lock_unlock VBA脚本的清理版本
Sub Lock_Unlock()
Dim CurrentUser As String 'holds the current users Windows login
Dim Approved As String
Approved = "|user1|user2|user3|"
'Give CurrentUser it's value
CurrentUser = Environ$("username")
'Check if the user is approved
If InStr(1, Approved, CurrentUser) > 0 Then
'The user can use this macro. Check if the sheet is currently locked
If ActiveSheet.ProtectContents = True Then
'It is, unlock
ActiveSheet.Unprotect Password:=PW()
Else
'It isn't, relock
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, Password:=PW()
End If
'Not a user approved to use this macro, don't do anything
End If
End Sub
Function PW() As String
PW = "password"
End Function
答案 0 :(得分:2)
我就是这样做的,将密码模块化为getFunction。
离。
Function getPassword()
getPassword = "password1"
End Function
现在,当您想要密码调用时Application.Run(ActiveWorkbook.Name & "!getPassword")
这将确保从活动工作簿中检索密码,无论您的宏是从哪个工作簿运行
实施例
Sub test()
MsgBox Application.Run(ActiveWorkbook.Name & "!getPassword")
End Sub
Function getPassword()
getPassword = "hello"
End Function
选项2:检查ThisWorkbook是否为ActiveWorkbook,如果不是,则使用我用来获取密码的相同方法从activeworkbook中调用宏。