ich etwas ähnlich den Code von K Davis in einer anderen Antwort bereitgestellt schrieb. Neben dem Codierungsstil gibt es wichtige funktionale Unterschiede.
• Griffe mehrere Spalten Ziel
• fügt Adresse Nachricht
• die Rogue Zelle wählt nach Benachrichtigung
• Schleifen nach hinten, so dass im Falle von mehreren Rogue-Eingänge, der Benutzer endet an der ersten
up • Deklaration und Zuweisung von Variablen sind reserviert, wenn sie tatsächlich benötigt werden
• Meldungsfeld für kritischen Stopp
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union(Columns("B"), Columns("D"))) Is Nothing Then
On Error GoTo bm_Safe_Exit
Application.EnableEvents = False
Dim mssg As String, iLimit As Long, a As Long, t As Long, trgt As Range
iLimit = 60
Set trgt = Intersect(Target, Union(Columns("B"), Columns("D")))
'loop backwards through multiples so we end up at the first rogue entry
For a = trgt.Areas.Count To 1 Step -1
For t = trgt.Areas(a).Cells.Count To 1 Step -1
If Len(trgt.Areas(a).Cells(t).Value2) > iLimit Then
mssg = "You have exceeded the " & iLimit & "-character limit by " & _
Len(trgt.Areas(a).Cells(t).Value2) - iLimit & " characters in " & _
trgt.Areas(a).Cells(t).Address(0, 0) & ". Please shorten the input and try again."
MsgBox mssg, vbCritical + vbOKOnly, "Bad Input"
trgt.Areas(a).Cells(t).ClearContents: trgt.Areas(a).Cells(t).Select
End If
Next t
Next a
Set trgt = Nothing
End If
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
Sie könnten die Sätze mit einem oder zwei vbLF
teilen möchten. Für mich macht es die Alarmmeldung effektiver; besonders so mit der Zelladresse hinzugefügt.
hatte ich gedacht, über all die Schurken Eingangszellenadressen in einer einzigen Nachricht setzen, aber dass die spezifische overdrawn Zeichenzahl ausschließen würde.
Beispieltext mit freundlicher Genehmigung von Lorem Ipsum Generator
Die [Worksheet_Change] (https: // msdn. microsoft.com/en-us/library/office/ff839775.aspx) (oder [Workbook_SheetChange] (https://msdn.microsoft.com/en-us/library/office/ff196611.aspx)) Event-Makro kann Daten ersetzen Validierung und fügen Sie viel mehr Funktionalität hinzu. – Jeeped
Bitte geben Sie Ihren Fragetitel nicht in allen CAPS ein. Es ist nicht höflich zu schreien, und es wird dir keine schnelleren Antworten geben. Es macht auch Ihren Titel schwieriger zu lesen, und es ist ziemlich unhöflich und ärgerlich. Korrekter Text ist viel einfacher zu lesen.Du siehst keine anderen Fragetitel in ALLEN CAPS auf der Hauptseite, oder? –
Ich bewerte, dass Sie tatsächlich ein .VSTO-Add-In im Visual Studio mit VB.NET schreiben, nur weil es meiner Meinung nach nur ein kleines bisschen einfacher ist und Sie mehr tun können, zum Beispiel können Sie die Event-Handler für Steuerelemente verwenden , so können Sie auf das TextChanged-Ereignis eines Textfelds zugreifen, um eine Fehlermeldung oder ähnliches anzuzeigen, aber nur für eine Sekunde oder so, und dann fortfahren oder nicht. In VBA ist es, meiner Meinung nach, etwas eingeschränkt, zum Beispiel, keine Event-Handler (meines Wissens) und wie ... keine textbox.enthält Methode ... Aber VB.NET, tut es aber. Probieren Sie es aus :) Es ist nicht zu schwer ... Wird es einen Wirbel geben. –