首页 文章

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

提问于
浏览
0

我有工作簿,工作表/工作簿都受到保护 . 当下拉值为“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

不确定,我在哪里出错,因为当用户点击受保护的单元格时,它不会抛出提示 .

1 回答

  • 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
    

相关问题