验证Worksheet_Change事件上的用户条目

时间:2017-11-14 00:02:44

标签: excel-vba excel-2010 vba excel

使用Excel 我有一段时间试图让包含的代码工作。 我试图将输入到单元格中的值限制为" A / B / C"它们可以输入大写或小写。如果以小写形式输入值,则此脚本会成功将值更改为大写。

当编号不是" A / B / C"时,编码会失效。进入了。

我想要实现的目标如下:

  • 未输入任何内容并通过完整性检查
  • 输入A并通过完整性检查
  • 输入B并通过完整性检查
  • 输入C并通过完整性检查
  • 输入
  • a并且未通过完整性检查,转换为A
  • 输入
  • b并且未通过完整性检查,转换为B
  • 输入
  • c并且未通过完整性检查,转换为C
  • 输入任何其他内容并且未通过完整性检查,转换为"" (空)

我已经注意到失败的那条线。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Intersect(Target, Range("C9:C51")) Is Nothing Then
    Else
        With Target
            If UCase(.Text) <> .Text Then
                .Value = UCase(.Text)
            ' ElseIf .Text < "A" Or .Text > "C" Then .Value = ""
            End If
        End With
    End If
End Sub

有人可以建议解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

也许:

<击>     Private Sub Worksheet_Change(ByVal Target As Excel.Range)         如果相交(目标,范围(&#34; C9:C51&#34;))则没有         其他             与目标                 如果UCase(.Text)&lt;&gt; .Text然后                     .Value = UCase(.Text)                     如果.Value =&#34; A&#34;或.Value =&#34; B&#34;或.Value =&#34; C&#34;然后                     其他                         .ClearContents                     万一                 万一             结束         万一     结束次

<击> 修改#1:

根据以下评论,应改为使用:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Intersect(Target, Range("C9:C51")) Is Nothing Then
    Else
        With Target
                Application.EnableEvents = False
                    .Value = UCase(.Text)
                    If .Value = "A" Or .Value = "B" Or .Value = "C" Then
                    Else
                        .ClearContents
                    End If
                Application.EnableEvents = True
        End With
    End If
End Sub