2016-04-27 8 views
0

Ich versuche, Benutzer zu beschränken, um einen 12-stelligen Wert für eine ID einzugeben. Ich verwende folgendes Makro dafür;Excel-Validierung für mehrere Werte einfügen

Private Sub Worksheet_Change(ByVal Target As Range) 
Application.EnableEvents = False 
If Target.Column <> 1 Then GoTo Exit_Sub 
    If Len(Target.Value) <> 12 Then 
     MsgBox " Plese enter exactly 12 characters!!" 
     Application.Undo 
    End If 
Exit_Sub: 
Application.EnableEvents = True 
End Sub 

Dies funktioniert ERFOLGREICH für eins nach dem anderen Wert. Wenn ich "1234" kopiere und versuche, es einzufügen, funktioniert es nicht. Aber wenn ich Paste in einer Menge, d. H. Für mehrere Zeilen, kopiere. Dann bricht alles und die Validierung funktioniert nicht. Bitte vorschlagen.

Danke, Sid

+2

Warum nicht Data Validation verwenden? –

+1

Zweite Datenvalidierung, aber zu Ihrem Makro, wenn Sie mehrere Zellen ausgewählt haben, dann ist Ihr Ziel ein Bereich von mehreren Zellen, so dass Sie target.value nicht direkt verwenden können, müssen Sie etwas wie 'für jedes c in Ziel 'verwenden und überprüfen auf einer Zelle für Zelle Basis. Oder verwenden Sie eine Array-Formel, um die maximale und minimale Länge der Zeichenfolge zu überprüfen [siehe Beispiel] (http://stackoverflow.com/questions/23678242/how-can-i-get-the-length-of-the-longest-string -in-einer-Spalte-Excel) – gtwebb

Antwort

0

Um mehrere Zellen zu behandeln Sie benötigen eine Schleife:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim r As Range 

    Application.EnableEvents = False 
    If Target.Column <> 1 Then GoTo Exit_Sub 
     For Each r In Target 
      If Len(r.Value) <> 12 Then 
       MsgBox " Plese enter exactly 12 characters!!" 
       r.Value = "" 
      End If 
     Next r 
Exit_Sub: 
    Application.EnableEvents = True 
End Sub