2017-12-11 2 views
1

Ich verwende diesen Code, um jedes Mal eine Fehlermeldung zu erhalten, wenn in Spalte "W" ein Text eingefügt wird. Wenn dies geschieht, wird der Text gelöscht und eine Box-Meldung erscheint: "Die Zeile W" & r & "muss nur Ziffern enthalten!", die die Zeilennummer des Fehlers angibt. r - ist als Target.Row gesetztMeldungsfeld für die Zeilennummer, wenn mehrere Fehler angezeigt werden

Mein Problem ist, dass, wenn ich einen Text im Bereich w10: w12 kopieren, erhalte ich die Fehlermeldung 3 mal, das ist großartig. In dem Meldungsfeld wird jedoch nur die Zeilennummer w10 - 3 mal angezeigt, d. H. "Die Zeile W10 darf nur Ziffern enthalten!". Wie kann ich den Code machen, um das Meldungsfeld mit w10, dann w11 und schließlich dann w12 anzuzeigen?

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

r = Target.Row 

Application.EnableEvents = False 
For Each cell In Target 
    If Not Application.Intersect(cell, Range("w10:w10000")) Is Nothing Then 
     If Not IsNumeric(cell.Value) Then 
      MsgBox "The row W" & r & " must contain only digits!" 
      cell.Value = vbNullString 
     End If 
    End If 
    Next cell 
    Application.EnableEvents = True 
+2

'... & cell.row & ...' –

Antwort

1
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range 

    Application.EnableEvents = False 
    For Each cell In Target 
     If Not Application.Intersect(cell, Range("w10:w10000")) Is Nothing Then 
      If Not IsNumeric(cell.Value) Then 
       MsgBox "The row W" & cell.row & " must contain only digits!" 
       cell.Value = vbNullString 
      End If 
     End If 
    Next cell 
    Application.EnableEvents = True 
+0

Das so einfach war. Du bist unglaublich. Vielen Dank! – geocc

+0

@geocc caveat: Sie können tun, was Sie tun möchten, ohne eine einzige Zeile VBA-Code schreiben (siehe Antwort unten) –

+0

Wäre es nicht einfacher, Schnittbereich zuerst zu bekommen und dann diese Zelle zu überprüfen (nicht nach nichts suchen) :) 'Für jeden rngArea In Schnittpunkt (Auswahl, [W10: W10000]) Bereiche: Für jede Zelle In rngArea: Weiter: Weiter' – JohnyL

2

[...] eine Fehlermeldung, jedes Mal, wenn in der Spalte "W", ein Text eingefügt wird erhalten. Wenn dies geschieht, wird der Text gelöscht und eine Boxmeldung erscheint: "Die Zeile W" & r & "darf nur Ziffern enthalten!"

Das Recht, was hier zu tun ist Datenvalidierung zu verwenden, um die möglichen Werte eine Zelle nehmen zu beschränken.

data validation setup dialog

Sie können eine Fehlermeldung an, die Excel zeigt einen ungültigen Wert angegeben:

validation error setup

... und sogar ein Tooltip Nachricht, wenn die Zelle ausgewählt ist:

data validation tooltip setup

Hier habe ich Datenvalidierung für Zelle A1 konfiguriert :

invalid valie!

Sie alles, was mit VBA-Code zu tun (mit dem Range.Validation API), aber wirklich, es gibt überhaupt keine Notwendigkeit.

+0

Bessere Route als die angenommene Antwort. –

+0

@ScottCraner immer bestrebt, den besten Hammer für den Job zu verwenden =) –

+0

Wieder war ich faul. Ich wusste, was die beste Antwort sein sollte, beantwortete aber die gestellte Frage statt der implizierten Frage. Ich wünschte, ich könnte die Änderung der richtigen Antwort erzwingen, aber etwas sagt mir, dass dies einer von denen sein wird, bei denen die Gemeinde über die angenommene Antwort hinausgeht. Ich würde löschen, wenn ich könnte. –

1

Es wäre einfacher, durchschnittene Bereich und dann diese Zellen Kontrolle zu bekommen:

Sub F() 

    Dim cell As Range 
    Dim rngArea As Range 
    Dim rngIntersect As Range 

    Set rngIntersect = Intersect(Selection, [W10:W10000]) 
    If rngIntersect Is Nothing Then Exit Sub 

    For Each rngArea In rngIntersect.Areas 
     For Each cell In rngArea 
      '// The code... 
     Next 
    Next 

End Sub 
+1

zu setzen Das ist gut, aber Sie sollten nicht auf mich aber die Frage oben antworten. Einige mögen daran bemängeln, dass Sie die Frage des OP nicht beantwortet haben. –

+0

Gelöscht Sie Ihren Namen :) – JohnyL

+1

Ich uploated, aber es war nicht mein Name, auf den ich bezog, habe ich kein Problem damit, für meine Fehler aufgerufen und wünschen mehr würde es tun, damit ich lernen kann. Ich bezog mich auf die Frage des OP: 'Wie kann ich den Code machen, um das Nachrichtenfeld mit w10, dann w11 und ... dann w12?' Anzuzeigen. Dies beantwortet die Frage des OP nicht. Wo kann ich sehen, wie Sie Ihre Vorschläge mit meiner Antwort umsetzen, andere nicht. Was ich sage, ist, dass es da draußen solche gibt, die kommen und dies als die Antwort auf die Frage selbst und die Ablehnung ansehen. Gute Idee aber. –

Verwandte Themen