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