单击受保护的单元格时,VBA 会发出提示
Posted
技术标签:
【中文标题】单击受保护的单元格时,VBA 会发出提示【英文标题】:VBA to throw a prompt when clicked on protected cell 【发布时间】:2016-10-05 12:59:40 【问题描述】:我有工作簿,工作表/工作簿都受到保护。 我有一个代码可以在下拉值“否”时锁定/禁用某些范围的单元格,当下拉值为“是”时解锁/启用 而我想禁用的下拉值和单元格位于不同的工作表上。
“主工作表”上的下拉菜单 “子工作表”上的单元格范围
当用户单击受保护范围并且值设置为“否”时,我还需要向用户发出提示。
我在“主工作表”上使用以下代码
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
不确定,当用户单击受保护的单元格时,它没有抛出提示,我哪里出错了。
【问题讨论】:
【参考方案1】:首先。您应该删除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
返回任何值。它应该是返回您为我选择的范围或单元格的函数。
编辑:
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
【讨论】:
感谢您的回复。在您的第一个功能上,我在“激活”行“范围类的激活方法失败”上收到错误。在第二个函数上,如果有错误,请纠正我我刚刚将函数更改为 Private Sub Worksheet_Changes(ByVal sh As Object, ByVal Target As Range),但它仍然给我一般消息“您尝试更改的单元格或图表受到保护...” 如果您不使用Select
,请删除Activate
。
是的,我已经评论了激活和第一个功能工作正常。
删除Private Sub WorkBook_SheetChange
中的ByVal sh as Object
。然后,将sh.Range("$E$19:$I$3000")
替换为Range("$E$19:$I$3000")
。最后,在.Range("E20:I3019").Locked = False
之后写上Private Sub WorkBook_SheetChange(Range("E20:I3019"))
我希望那些私人潜艇在同一个模块中......否则尝试将私人改为公共。如果有什么可以帮到你,请把它有用吗?以上是关于单击受保护的单元格时,VBA 会发出提示的主要内容,如果未能解决你的问题,请参考以下文章