【发布时间】:2016-11-02 15:46:28
【问题描述】:
问题看起来很大,但对你们来说答案很简单 我的代码第一次有效,第二次尝试无效。 我有 2 张“菜单”和“子表” 基本上,我在菜单表是/否值上设置了数据验证下拉菜单。 第一个场景 选择“是”将启用第二张表(子表)上的单元格 选择“否”将禁用第二张表(子表)上的单元格。
第二种情况, 用户选择“否”并选择第二张工作表将提示他启用单元格“确定”并取消。 选择“确定”将启用单元格,下拉列表中的值将更改为“是” 在 msgprompt 中选择“取消”将禁用单元格,下拉列表中的值将保持为“否” 如果用户在下拉菜单中选择了“是”,则不应显示消息提示。
问题:代码工作正常,直到第二个场景。 用户选择“否”并在消息提示中选择第二张表,他选择“否”。现在细胞被禁用。 如果用户返回菜单表并选择“是”,则不会启用单元格。 不知道现在是什么不启用单元格。请帮忙
菜单表上的代码
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A11")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Select Case (Target.Value)
Case "YES"
Call uEnable
Case "NO"
Call uDisable
Exit Sub
End Select
Application.EnableEvents = True
End Sub
子表上的代码
Private Sub Worksheet_Activate()
UDisable
End Sub
模块代码
Option Explicit
Private mMessageDisplayed As Boolean
Public Sub uDisable()
If ActiveSheet.ProtectContents And Not mMessageDisplayed Then
mMessageDisplayed = True
If ThisWorkbook.Sheets("Menu").Range("A11") = "NO" Then
If MsgBox("Cells are locked on current sheet, press ok to Unlock", vbOKCancel + vbInformation) = vbOK Then
ThisWorkbook.Worksheets("Menu").Range("A11") = "YES"
With ThisWorkbook.Sheets("Subsheet")
ActiveWorkbook.Unprotect Password:="xyz"
.Range("E13:E14").Locked = False
ActiveWorkbook.Unprotect Password:="xyz"
End With
Else
ThisWorkbook.Worksheets("Menu").Range("A11") = "NO"
With ThisWorkbook.Sheets("Subsheet")
ActiveWorkbook.Unprotect Password:="xyz"
.Range("E13:E14").Locked = True
ActiveWorkbook.Protect Password:="xyz"
End With
End If
Else
Exit Sub
End If
End If
End Sub
第二个模块
Public Sub uEnable()
With ThisWorkbook.Sheets("Subsheet")
ActiveWorkbook.Unprotect Password:="xyz"
.Range("E13:E14").Locked = False
ActiveWorkbook.Protect Password:="xyz"
End With
End Sub
我尝试使用调试方法,无法确定根本原因。
两个相交代码
`Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("E42")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim inputCell As Range
Set inputCell = Range("E43")
Select Case (Target.Value)
Case "Specific Days"
inputCell.Locked = False
inputCell.Activate
Case Else
'This handles **ANY** other value in the dropdown
inputCell.Locked = True
' inputCell.Clear
End Select
Application.EnableEvents = True
If Intersect(Target, Range("E29")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Select Case (Target.Value)
Case "YES"
Call Notify
Case "NO"
Call NotifyUserGeneral
End Select
Application.EnableEvents = True
End Sub`
【问题讨论】:
-
我认为
uDisable正在锁定和保护工作表。而uEnable只是解锁。可能也需要使用相关密码取消保护。 -
在多个地方进行是/否检查似乎也是多余的。你应该让一个部分处理
-
@destination-data 我尝试在 uEnable 中使用 unprotect/protect (修改了上面的代码)。但这也有帮助!
-
你尝试的时候发生了什么?
-
@destination-data 问题仍然存在。当 drop 设置为“yes”时,单元格未启用。我必须选择“否”并在消息提示上单击“确定”以单击“确定”,以便启用单元格。