拒绝进入取决于值

我想问一下,如果在这个 Range("D2:D500") 中输入了“Denied”这个词,那么它所在行之后的值不能只在 E 列中输入。

只要“拒绝”字词进入 D 列,仅下方 E 列的单元格无权输入任何值,否则用户可以在 A、B、C 列输入值和 D 只。如果用户在 E 列中输入值,则显示消息“您不允许”并清除该单元格的内容。

对于同一行,我使用的以下代码如下:

' 列 D 的此代码,用于清除同一行中的数据

If rngTarg Is Nothing Then GoTo ExitHandler
For Each rngToChk In rngTarg
    Select Case rngToChk.Value
    Case "Denied"
        rngToChk.Offset(0,-1).ClearContents
        rngToChk.Offset(0,-2).ClearContents
        rngToChk.Offset(0,1).ClearContents
        rngToChk.Offset(0,2).ClearContents
    End Select
Next rngToChk


' this code for Column E which will help to user that it won’t have access to enter data in the same row

For Each cell In rngTarg
    If cell.Offset(0,-1) = "Denied" Then
    cell.Select
    MsgBox Excel.Application.username & ",As you enter <" & cell.Offset(0,-1) & "> in Column D" _
        & vbNewLine & "That is why you cannot enter Value.",vbokOnly + vbInformation,"Information"

        cell.ClearContents
        cell.Offset(1,0).Select
        GoTo ExitHandler
    End If
Next cell

我希望它有助于理解我的查询。

感谢与问候

穆尼布

拒绝进入取决于值

avrilwang 回答:拒绝进入取决于值

无需使用 VBA。您可以使用 Data Validation

  1. 选择范围 E2:E LastCell。在 Excel 2007+ 中,它是E2:E1048576。对于旧版本,它是 E2:E65536。只需选择单元格 E2 并按 Shift + End + 向下箭头

  2. 点击 Data 标签,然后点击 Data Validation

  3. 选择 Custom 并在 Formula 中键入 =COUNTIF($D$1:$D1,"Denied")=0,如下所示

    enter image description here enter image description here

  4. 点击Ok,我们就完成了

在行动

enter image description here

,

在您希望拒绝输入的工作表的代码表中安装以下代码。这个位置至关重要。在另一个位置,代码不会自动运行。

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 304

    Const Denied    As String = "denied"        ' change to suit (not case sensitive)
    Const DeniedClm As String = "D"             ' change to suit: no modifications to the right of this column
    
    Dim Fnd         As Range                    ' cell where Denied is found (if any)
    Dim Ct          As Long                     ' numeric equivalent of DeniedClm
    
    Ct = Columns(DeniedClm).Column
    With Target
        If .Column > Ct Then
            Set Fnd = Columns(Ct).Find(Denied,LookIn:=xlValues,_
                                       LookAt:=xlWhole,MatchCase:=False)
            If Not Fnd Is Nothing Then
                If .Row >= Fnd.Row Then
                    MsgBox "This cell shall not be modified." & vbCr & _
                           "Your change will be rolled back.",_
                           vbInformation,"Modification not allowed"
                    With Application
                        .EnableEvents = False
                        .Undo
                        .EnableEvents = True
                    End With
                End If
            End If
        End If
    End With
End Sub

如果您需要其他语言的“拒绝”一词,您可以更改它,并且您可以更改它可能出现的列。如果在指定的列中没有这样的词 - 在一个单元格中 - 没有这样的词,该函数将不采取任何行动。

本文链接:https://www.f2er.com/3527.html

大家都在问