excel 工作表.激活未激活指定的工作表

dbf7pr2w  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(197)

所以我正式遇到了一堵墙。我写了一个宏,它允许用户在输入密码时解锁和取消隐藏所有工作表,除了包含密码的工作表。在宏的结尾,我想转到一个特定的工作表。
我已经尝试了人类已知的对该工作表的每一个引用,包括工作表代码名称和索引,但“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
js5cn81o

js5cn81o1#

没关系。我刚想出来,但这是我的答案,以防其他人需要帮助解决同样的问题。

Unload inputPass_box

我出于某种原因放弃了(“inputPass_box”是一个用作输入框的UserForm)。如果有人能好心地告诉我这一点,我将非常感激,但就我 * 非常 * 有限的知识而言,这一行似乎触发了UserForm_QueryClose事件,因为在我的项目中,此事件包含一个“End”命令,以防止用户窗体将任何数据传递回子控件。因为当我希望停止关闭或取消用户窗体而不是显示上面代码块中包含的任何错误消息时,这将触发其他几个事件。

xkftehaa

xkftehaa2#

pPrompt =输入框(“请输入密码”)

bkPswrd = Worksheets("Password List").Cells(3, 2)
    
    If pPrompt = "" Then
        MsgBox "You didn't enter anything...", vbInformation, "No password"
        UnProtectAll
    ElseIf pPrompt = bkPswrd Then

使用“InputBox”没有问题,inputPass框可能有问题

相关问题