VBA在点击受保护的单元格时发出提示

我有两个工作簿/工作簿保护。 我有一个代码来locking/禁用某些范围的单元格,当下拉值“no”和解锁/启用时,下拉的值是“是”而下拉值和单元格,我想禁用是不同的床单。

“主工作表”下拉列表“子工作表”上的单元格范围

当他点击受保护的范围,并且值被设置为“否”时,我还需要向用户发出提示。

我在“主表”上使用以下代码

Private Sub Worksheet_Change(ByVal Target As Range) Dim worksh As Integer Dim worksheetexists As Boolean Dim str1 As String If UCase$(Range("E30").Value) = "YES" Then Sheets("SubSheet").Select Sheets("SubSheet").Range("E20:I3019").Locked = False Sheets("SubSheet").Range("E20:I3019").Activate Else Sheets("SubSheet").Range("E20:I3019").Locked = True End If End Sub 

以下代码在子表单上

 Private Sub WorkBook_SheetChange(ByVal sh as Object, ByVal Target as Range) If Intersect (Target, sh.Range("$E$19:$I$3000")) Is Nothing Then Exit Sub MsgBox "Please select the appropriate dropdown on MAIN Sheet " & Target.Address With Application .EnableEvents = False .UnDo .EnableEvents = True End With End Sub 

不知道,我错在哪里,当用户点击受保护的单元格时,它不会抛出提示。

第一。 您应该删除工作Sheets("SubSheet").Select 。 如果你运行你的代码,而你不在表单内,那么可能会发生错误。 试着做:

 with ThisWorkbook.Sheets("SubSheet") If UCase$(Range("E30").Value) = "YES" Then .Range("E20:I3019").Locked = False .Range("E20:I3019").Activate Else .Range("E20:I3019").Locked = True End If end with 

第二。 你不返回目标范围。 我的意思是你的Private Sub WorkBook_SheetChange等待一个ByVal Target作为参数和你的Private Sub Worksheet_Change返回任何值。它应该是一个函数返回您select的范围或单元格。

编辑:

 with ThisWorkbook.Sheets("SubSheet") If UCase$(Range("E30").Value) = "YES" Then .Range("E20:I3019").Locked = False Else .Range("E20:I3019").Locked = True WorkBook_SheetChange Range("E20:I3019") End If end with 

 Private Sub WorkBook_SheetChange(ByVal Target as Range) If Intersect (Target, Range("$E$19:$I$3000")) Is Nothing Then Exit Sub MsgBox "Please select the appropriate dropdown on MAIN Sheet " & Target.Address With Application .EnableEvents = False .UnDo .EnableEvents = True End With End Sub