在几个工作簿中使用相同的热键

时间:2014-10-23 20:56:26

标签: vba excel-vba hotkeys excel

我在几个工作簿模板中有一个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

1 个答案:

答案 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中调用宏。