【问题标题】:locking Excel worksheet that has macro锁定具有宏的 Excel 工作表
【发布时间】:2013-02-18 15:17:28
【问题描述】:

我已经锁定了几个单元格和工作表,并且我有一个用于工作表的宏,但是我找不到锁定工作表和同时运行宏的方法。每次我尝试在宏被锁定时运行宏都会给我一个错误。

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim g As Long
Dim r As Long
Dim y As Long
Dim overallhealth As Range
Dim varaincerange As Range
Set varaincerange = Sheets("D").Range("B5:B9")
Set overallhealth = Sheets("D").Range("B4")
y = Application.WorksheetFunction.CountIf(varaincerange, "y")
g = Application.WorksheetFunction.CountIf(varaincerange, "g")
r = Application.WorksheetFunction.CountIf(varaincerange, "r")
If g = 5 Then
overallhealth = "G"
ElseIf g = 4 And y = 1 Then
overallhealth = "G"
ElseIf r >= 2 Then
overallhealth = "R"
ElseIf y = 1 And r = 1 Then
overallhealth = "Y"
ElseIf y > 1 And r >= 1 Then
overallhealth = "R"
ElseIf y = 1 And r > 1 Then
overallhealth = "R"
ElseIf y >= 3 Then
overallhealth = "R"
ElseIf g = 3 And y = 2 Then
overallhealth = "Y"
ElseIf g = 4 And r = 1 Then
overallhealth = "Y"
End If
End Sub

如何在单元格和工作表被锁定和保护时运行宏?

谢谢!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以在宏的开头使用

    简单地取消保护它
    Sheets("D").Unprotect "password"

    最后用

    重新保护它
    Sheets("D").保护“密码”

    【讨论】:

    • 嗨,对不起,它仍然给我 1004 错误。当我解锁工作表时,宏运行正常,但是当我使用上面的代码锁定工作表时,它给了我一个 1004 错误。
    • 您确定它与.Protect 一致吗?如果是,工作表的名称是否正确?
    • 是的,我已经仔细检查过,但它仍然给我一个 1004 错误。我假设它由于锁定单元格而给出此错误....?
    • 那么如果你单步执行代码(在第一行设置一个断点用 F9 和 pres F8 为每一步),是否会导致最后一行的错误?如果是这样,您可以手动保护工作表吗?试试宏记录器,看看它生成了什么代码...
    • 第二个想法:将 Application.EnableEvents = False 添加到代码顶部 - 并将 Application.EnableEvents = True 添加到末尾。这样可以防止潜在的无限循环(尤其是如果您有另一个 Worksheet_Change 事件)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多