2016-07-19 3 views
0

Ich habe ein Excel-Arbeitsblatt mit einer Tabelle, in der Spaltenüberschriften Zeitintervalle und Zeilenüberschriften die Namen der Personen sind. Jede Zelle in der Mitte hat eine Dropdown-Liste. Ich habe den folgenden Code eingegeben, damit der Benutzer mehr als eine Option aus dem Dropdown-Feld innerhalb jeder Zelle auswählen kann.Data Validation Code: Zielbereich angeben

Der Code funktioniert gut, aber das ganze Blatt wird davon beeinflusst und nicht nur der Zielbereich. Wenn ich z. B. versuche, eine Zelle in der Spaltenüberschrift zu bearbeiten, indem ich einfach die Rücktaste auf der Zelle anklicke und neuen Text eingib, formatiert sich die Zelle wie folgt: "6:30 Uhr, 7:30 Uhr" oder "alter Wert, neuer Wert "

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 

ich dies durch einen Rechtsklick auf der Zelle vermeiden kann, klare Inhalte treffen, die Zelle austritt, dann wieder in der Zelle klicken, um es zu bearbeiten. Aber ich möchte dieses Problem verhindern. Irgendeine Idee, wo mein Code falsch gelaufen ist? Der Zielbereich ist der richtige Zellbereich, für den ich den Code benötige. Vielen Dank im Voraus für Ihre Hilfe

Antwort

0

Diese Zeile: If Target.Range("E10:V600") Is Nothing Then ist nicht die richtige Syntax. Oder vielleicht kompiliert die Syntax, aber es produziert nicht, was Sie wollen.

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

So vollständige Code wird ption 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 

    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 
+0

Muss ich auch die 'Private Sub Worksheet_Change ändern (ByVal Target As Range)'? – SRag

+0

@SRag - siehe meine vollständigen Code bearbeiten –

+0

danke für den Code. Jetzt innerhalb des angegebenen Bereichs bin ich nicht in der Lage, Inhalte zu löschen oder drücken Sie die Rücktaste, um die Zelle zu löschen. Stattdessen formatiert sich die Zelle jedesmal, wenn ich versuche, sie zu löschen, als "alter Wert,,,". Irgendwelche Arbeiten dafür? – SRag