【问题标题】:Denied Entry Dependent Upon the Value拒绝进入取决于价值
【发布时间】:2021-08-01 01:46:22
【问题描述】:

我想问一下,如果在这个 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

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

感谢和问候

穆尼布

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    无需使用 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,如下图所示

    4. 点击Ok就完成了

    行动中

    【讨论】:

    • 嗨,悉达多
    • 感谢您的宝贵工作。我更喜欢 vba 代码,但您的解决方案非常有帮助。谢谢和问候
    【解决方案2】:

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多