所以我正式遇到了一堵墙。我写了一个宏,它允许用户在输入密码时解锁和取消隐藏所有工作表,除了包含密码的工作表。在宏的结尾,我想转到一个特定的工作表。
我已经尝试了人类已知的对该工作表的每一个引用,包括工作表代码名称和索引,但“sheet.activate”事件就是不会触发。我已经尝试将屏幕更新设置为true,在工作表之前和之后。activate命令。事件被启用。我已经禁用了所有Excel加载项。我已经尝试了所有我能想到的和所有我在网上论坛上找到的。我会从代码中看到,我甚至在激活序列的每一步都向代码添加了基本的时间延迟,但都无济于事。我在代码的不同部分尝试了激活序列。在代码完成时,我得到的最好结果是激活了工作簿中的第一个工作表。我甚至启用了Option Explicit,但它没有任何效果。
现在,奇怪的是,如果我把除了激活事件之外的所有东西都从代码中去掉,它就能完美地工作。如果我一行一行地遍历代码,激活行就能工作。但是如果我编译代码并运行整个子nada。我到底错过了什么?
下面是我的完整代码为这个子:
Option Explicit
Sub UnProtectAll()
Application.ScreenUpdating = False
Dim pPrompt As String
Dim bkPswrd As String
inputPass_box.Show
pPrompt = inputPass_box.passInput.Value
bkPswrd = Worksheets("Password List").Cells(3, 2)
If pPrompt = "" Then
MsgBox "You didn't enter anything...", vbInformation, "No password"
UnProtectAll
ElseIf pPrompt = bkPswrd Then
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Unprotect bkPswrd
Next ws
ThisWorkbook.Worksheets("Folder History").Visible = xlSheetVisible
ThisWorkbook.Worksheets("Master List").Visible = xlSheetVisible
ThisWorkbook.Worksheets("File Formats").Visible = xlSheetVisible
Unload inputPass_box
Worksheets("Change Sheet").Shapes("Button 1").Visible = False
Application.ScreenUpdating = True
Application.Wait (Now + TimeValue("0:00:03"))
ThisWorkbook.Worksheets("Folder History").Select
ThisWorkbook.Worksheets("Folder History").Activate
Application.Wait (Now + TimeValue("0:00:03"))
ThisWorkbook.Worksheets("Change Sheet").Select
ThisWorkbook.Worksheets("Change Sheet").Activate
Else
MsgBox "You have entered an incorrect password. Please check your password and try again.", vbCritical, "Wrong Password!"
UnProtectAll
End If
End Sub
2条答案
按热度按时间js5cn81o1#
没关系。我刚想出来,但这是我的答案,以防其他人需要帮助解决同样的问题。
我出于某种原因放弃了(“inputPass_box”是一个用作输入框的UserForm)。如果有人能好心地告诉我这一点,我将非常感激,但就我 * 非常 * 有限的知识而言,这一行似乎触发了UserForm_QueryClose事件,因为在我的项目中,此事件包含一个“End”命令,以防止用户窗体将任何数据传递回子控件。因为当我希望停止关闭或取消用户窗体而不是显示上面代码块中包含的任何错误消息时,这将触发其他几个事件。
xkftehaa2#
pPrompt =输入框(“请输入密码”)
使用“InputBox”没有问题,inputPass框可能有问题