数据验证码:指定目标范围

时间:2016-07-19 15:18:50

标签: vba excel-vba validation optimization excel

我有一个带有表的excel工作表,其中列标题是时间间隔,行标题是人的名字。中间的每个单元格都有一个下拉列表。我输入了下面的代码,以便用户可以从每个单元格的下拉列表中选择多个选项。

代码工作正常,但整张纸受到影响而不仅仅是目标范围。例如,当我尝试编辑列标题中的单元格时,只需在单元格上按退格键并输入新文本...单元格格式如下:“早上6:30,早上7:30”或“旧值,新值“

Option Explicit

 Private Sub Worksheet_Change(ByVal Target As Range)
 ' To Select Multiple Items from a Drop Down List in Excel

  Dim Oldvalue As String
  Dim Newvalue As String

On Error GoTo Exitsub
If Target.Range("E10:V600") Is Nothing Then
GoTo Exitsub
Else: If Target.Value = "" Then GoTo Exitsub Else
    Application.EnableEvents = False
    Newvalue = Target.Value
    Application.Undo
    Oldvalue = Target.Value
    If Oldvalue = "" Then
        Target.Value = Newvalue
    Else
        Target.Value = Oldvalue & ", " & Newvalue
End If
End If
Application.EnableEvents = True

Exitsub:
Application.EnableEvents = True

End Sub

我可以通过右键单击单元格,点击清除内容,退出单元格,然后再次单击单元格进行编辑来避免这种情况。但我想防止这个问题。 知道我的代码出错了吗?目标范围是我需要代码处理的正确单元格范围。在此先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这一行:If Target.Range("E10:V600") Is Nothing Then语法不正确。或者语法编译,但它不会产生你想要的东西。

将其更改为:If Not Instersect(Target, Me.Range("E10:V600")) Is Nothing Then

所以完整的代码变成了 ption明确

 Private Sub Worksheet_Change(ByVal Target As Range)
     ' To Select Multiple Items from a Drop Down List in Excel

    Dim Oldvalue As String
    Dim Newvalue As String

    If Not Instersect(Target, Me.Range("E10:V600")) Is Nothing Then

        If Len(Target.Value) Then 

            Application.EnableEvents = False
            Newvalue = Target.Value

            Application.Undo

            Oldvalue = Target.Value

            If Oldvalue = "" Then
                Target.Value = Newvalue
            Else
                Target.Value = Oldvalue & ", " & Newvalue
            End If

            Application.EnableEvents = True   

        End If

    End If

End Sub