Herbers Excel-Forum - das Archiv
Falsche Eingabe Gültigkeitsbereich abfangen

|
Betrifft: Falsche Eingabe Gültigkeitsbereich abfangen
von: Guido Palacios
Geschrieben am: 27.10.2003 15:44:07
Hallo,
hab noch immer das Problem das bei einer falsch eingabe eines Wertes in einem G-Bereich und anschliessender richtig eingabe das Change-Ereignis 3x Rekursiv aufgerufen wird. Habs mit Flags soweit hingekriegt.. allerdings wie in dem Artikel den ChrisL mir geschickt hat...
http://xlforum.herber.de/messages/327769.html
...kann ich ja auch 2x hintereinander einen falschen Wert eingeben der mir den 5x einen rekursiven aufruf verursacht!
Gibt es eine Möglichkeit schon bei der 1. Falsch eingabe zu reagieren???
Erhalte die Fehlermeldung (Eingabe ist nicht Element des G-Bereichs) nämlich bevor ich überhaupt nur in die nähe des Debug-Modus gelange, auch wenn ich keine Meldung angebe (vermute Excel-Std-Meldung)
Jemand eine Idee??
@ChrisL
Hab das nicht ganz geblickt "im Change abfangen"...?!
grüße
Guido P.
Betrifft: AW: Falsche Eingabe Gültigkeitsbereich abfangen
von: ChrisL
Geschrieben am: 27.10.2003 16:21:44
Hi Guido
Du drehst dich im Kreise. Akzeptiere dass du die Gültigkeitsprüfung im Change Ereignis machen musst. Wenn du mir sagst, was für eine Gültigkeitsprüfung du vornimmst und auf welchen Bereich schreibe ich Dir was. So kompliziert kanns nicht sein.
Gruss
Chris
This message contains 78% recycled characters.
Betrifft: AW: Falsche Eingabe Gültigkeitsbereich abfangen
von: Guido Palacios
Geschrieben am: 27.10.2003 16:53:16
Hi Chriss nochmal!
Vorab erstmal Danke für dein Bemühen!
Meine Situtation:
Habe eine excel Datei die als Aufgabenplanung dient!
Meine Afg war dieses Sheet so zu erweitern das bei auswahl eines 'Bearbeiter' aus dem G-Bereich (Spalte Q enthält Kürzel der MA's) automatisch die aktuelle Zeile in einem Array gespeichert wird und beim Beenden als Email versendet wird!! <-- klappt alles wunderbar.
Ich aktualisiere den G-Bereich (Target.Validation) bei jedem click auf eine Zelle in dieser Spalte Q (Selection_Change) und merke mir auch gleich das Value (zum Vergleich ob alt.value = neu.value ist).
Gebe ich 1x GP ein passts, geb ich nochmal GP ein erscheint von mir eine Box mit der Info das "an diesen Bearbeiter bereits eine Email generiert wurde".. <-- so auch gewollt!
Jetzt gebe ich einen falschen Wert ein und drücke Enter --> es kommt sofort die Meldung das ein ungültiges Element ausgewählt wurde! Ich habe keine Chance diese Meldung abzufangen...
Wie in dem Thread bereits beschrieben bei der 1. FalschEingabe 3 Rekursive Aufrufe bei 2 FalschEingaben 5 RekAufrufe...
OK soweit sogut. Gebe also 1x falsch ein und danach richtig (aber nicht wieder gp) dann wirds beim 1. Durchlauf richtig gespeichert --> dann kommt die Rekursion --> es wird geprüft ob alter Wert gleich neuer ist und da beim 1. mal alles geklappt hat läufts dann nat. jetzt auf den Fehler das bereits an diesen Bearbeiter versendet wurde!
Ich hatte die Lösung fast schon programmiert, in dem ich nach der Ausgabe, 'das bereits...', eine Flag setz wo ich dann abfangen kann wenns Rekursiv wird.. allerdings nicht wenn ich 2x was falsches eingebe, dann hab ich ja 5 aufrufe und mein Flag ist längst wieder zurückgesetzt wo er noch am RekursionAbarbeiten ist...
Wow, das war jetzt aber ein Text...
Ich hoffe ich hab mich einigermaßen Verständlich ausgedrückt!
Mit 'was für eine Gültigkeitsprüfung auf welchen Bereich' gemeint ist versteh ich glaub ich nicht so ganz. Vielleicht erklärt dies nachfolgender Code....
...Meinen GBereich bastel ich wie folgt zusammen:
Selection_Change
if target.column = blabla then
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=GBereich
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "Zelle gesperrt"
.InputMessage = ""
.ErrorMessage = "Zelle ist gesperrt, bitte selektieren sie ein Element aus der Auswahlliste!"
.ShowInput = True
.ShowError = True
End With
end sub
Grüße
Guido P.
P.S: Ich bin echt am Verzweifeln und will endlich FEIERABEND!!!
Betrifft: AW: Falsche Eingabe Gültigkeitsbereich abfangen
von: ChrisL
Geschrieben am: 27.10.2003 17:41:27
Hi Guido
Langsam verstehe ich in welche Richtung dass es geht, aber so ganz habe ich den Überblick noch nicht. Insbesondere wie es mit deinem G-Bereich genau läuft. Ist dies eine definierter Name, Spalte G oder was genau verstehst du darunter.
Angenommen die Liste kommt aus dem Tabellenbereich sagen wir B1:B3
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 1 Then
If WorksheetFunction.CountIf(Range("B1:B3"), Target) = 0 Then
MsgBox "Zelle ist gesperrt, bitte selektieren sie ein Element aus der Auswahlliste!", vbCritical
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
End If
End Sub
Dabei entfernst du in der Gültigkeit die automatische Fehlermeldung bei einer fehlerhaften Eingabe. Die Gültigkeitsprüfung wird also direkt im Worksheet_Change Ereignis ausgeführt.
Gruss
Chris
Betrifft: AW: Falsche Eingabe Gültigkeitsbereich abfangen
von: Guido Palacios
Geschrieben am: 28.10.2003 09:53:03
Hi Chris,
hmm, habs grade eingefügt... Wie's aussieht bist du mein neuer Held!!!
Fätten Dank, nachdem ich '.showerror = false' gesetzt hatte kam ich in deine Beschriebene Routine....
Chris, bin dir wirklich zutiefstem Dank verplichtet, jetzt kann ich endlich eine Rauchen gehen... *g
Grüße, bis zum nächsten Prob!
Thx
Guido P.
Betrifft: Danke für die Rückmeldung
von: ChrisL
Geschrieben am: 28.10.2003 10:30:52
Hi Guido alias Hans ab-dampf im Raucherloch ;-)
Gern geschehen.
Gruss
Chris