Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
300to304
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
300to304
300to304
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Konflikt Gültigkeit und Change-Ereignis

Konflikt Gültigkeit und Change-Ereignis
31.08.2003 17:56:55
Bjoern
Huhu zusammen,

ich ärgere mich grade seit über einer Stunde über ein an sich simples Problem, für das ich aber partout keine Lösung finde.

Ich möchte, daß der Cursor nach Eingabe in einem Formularfeld automatisch in ein bestimmtes nächstes Eingabefeld springt. Gleichzeitig sind die Eingabewerte im Ausgangsfeld aber gültigkeitsbegrenzt.

Die Kombination der integrierten Gültigkeitsprüfung und eines Sprungbefehls à la:

If Target.Column = 8 And Target.Row = 38 Then
Cells(Target.Row, 10).Select
End If

scheint Excel aber zu überfordern: Bei Eingabe unzulässiger Werte erscheint zwar die vorgesehene Fehlermeldung der Gültigkeitsprüfung und die Zelle wird markiert - gleichzeitig ist der Cursor - bedingt durch den VBA-Befehl - aber trotzdem weitergesprungen! Eine Eingabe im Ausgangsfeld ist dann auch nicht mehr möglich. Der Wert wird zwar zunächst bei der Eingabe im Ausgangsfeld angezeigt, bei Verlassen des aktivierten Folgefelds wird der Wert jedoch in letzteres übertragen - der Fehlerwert im Ausgangsfeld bleibt erhalten.

Leider läßt sich das Problem auch nicht dadurch beheben, daß für die Ausführung des VBA-Scripts eine weitere Bedingung in Abhängigkeit vom Eingabewert notiert wird, also etwa:

If Target.Column = 8 And Target.Row = 38 and Cells(38,8) < 32 Then
Cells(Target.Row, 10).Select
End If

Hat jemand eine Lösung???

Danke für jeden Tipp.

Viele Grüße

Björn

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Konflikt Gültigkeit und Change-Ereignis
31.08.2003 19:18:14
Nepumuk
Hallo Björn,
versuch es mal so:
If Target.Address = "$H$38" And Target.Value < 32 Then Cells(38, 10).Select
Gruß
Nepumuk
AW: Konflikt Gültigkeit und Change-Ereignis
31.08.2003 19:38:19
Björn
Huhu Nepumuk,

einmal mehr herzlichen Dank für den Tipp! Dieses eine Mal klappt er leider allerdings nicht. Das Ergebnis ist dasselbe. Ich denke 'mal, das Phänomen ist ein kleiner Bug in Excel-VBA :-(. Es hängt wohl mit der zeitlichen Reihenfolge zusammen: das Script bezieht sich auf den target.value, der vor der Eingabe in der Zelle stand.
Mir fällt allerdings kein Workaround ein. Notfalls muß ich auf die Cursor-Steuerung verzichten, die Gültigkeitsprüfung ist leider obligat :-(((. Kann man die Reihenfolge der selektierten Felder nicht noch irgendwie anders steuern - ohne großen Aufwand über Steuerelemente?

Viele Grüße und nochmals Danke

Björn
Anzeige
AW: Konflikt Gültigkeit und Change-Ereignis
31.08.2003 19:47:04
Björn
Huhu Nepu,

es ist doch nicht (ganz) dasselbe. Mit der Gültigkeitsprüfung läßt sich zwar auch Dein Script leider nicht vereinbaren. Aber es läuft ansonsten fehlerfrei, soweit ich sehe, so daß man daraus eine eigene Gültigkeitsprüfung bilden kann - etwa:


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$H$38" And Target.Value < 32 Then
Cells(38, 10).Select
Else
MsgBox "Bitte nur Werte zwischen 1 und 31 eingeben"
Cells(38, 8).Select
End If
End Sub


Ich weiß allerdings nicht, ob diese Prüfung so zuverlässig ist, wie die in Excel integrierte...?

Viele Grüße

Björn
Anzeige
AW: Konflikt Gültigkeit und Change-Ereignis
31.08.2003 20:15:13
Nepumuk
Hallo Björn,
die Prüfung ist absolut zuverlässig. Ich würde sie aber etwas anders machen:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$H$38" Then
If Target.Value < 32 And Target.Value > 0 Then
Cells(38, 10).Select
Else
MsgBox "Bitte nur Werte zwischen 1 und 31 eingeben"
Cells(38, 8).Select
End If
End If
End Sub



Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk
Anzeige
AW: Konflikt Gültigkeit und Change-Ereignis
31.08.2003 21:12:34
Björn
Huhu Nepu,

nochmals lieben Dank für Deine Anregung! Tatsächlich war der erste Coding-Versuch suboptimal. Allerdings muß ich noch eine ganze Reihe weiterer Bedingungen einbauen :-(. Inzwischen ist es ein etwas monströses Konstrukt geworden - sicherlich auch teilweise redundant - das zunächst einmal so aussieht:

If Target.Address = "$H$38" And Target.Value < 32 And Cells(38, 1) = 1 And Cells(38, 8) <> "" Then
Cells(38, 10).Select
Else

If Target.Address = "$H$38" And Target.Value > 31 Then
MsgBox "Bitte Eingabe korrigieren (Zahl zwischen 1 und 31).", 0 + 64, "Fehlerhafte Eingabe"
Cells(38, 8).Select
Cells(38, 8).ClearContents
End If

If Target.Address = "$H$38" And Cells(38, 10) <> "" And Target.Value <> "" And Cells(38, 1) = 0 Then
MsgBox "Bitte gültigen Tageswert eingeben. Im Monat " & Cells(38, 10) & " gibt es keinen " & Cells(38, 8) & ".ten!", 0 + 64, "Fehlerhafte Eingabe"
Cells(38, 8).Select
Cells(38, 8).ClearContents
End If

If Target.Address = "$H$38" And Cells(38, 1) = 0 And Cells(38, 10) = "" And Cells(38, 8) <> "" Then
Cells(38, 10).Select
End If

End If
If Target.Address = "$J$38" And (Target.Value > 12 Or (Cells(38, 1) = 0 And Cells(38, 8) <> "") Or Target.Value < 1) And Target.Value <> "" Then

MsgBox "Bitte Eingabe berichtigten (Zahl für den Monat muß zwischen 1 und 12 liegen).", 0 + 64, "Fehlerhafte Eingabe"
Cells(38, 10).ClearContents
Cells(38, 10).Select
Else
If Target.Address = "$J$38" Then
If Cells(38, 10) <> "" And Cells(38, 8) <> "" Then
Cells(48, 8).Select
End If
If Cells(38, 8) = "" Then
Cells(38, 8).Select
End If
End If
End If

Dabei ist also H38 ein Eingabefeld für den Tag, J38 das Eingabefeld für den Monat und in cells(38,1) wird die Gültigkeit der Kombination von Tageszahl und Monatszahl überprüft mit zB =WENN(MONAT(DATUM(2004;J38;H38))=J38;1;0) (was natürlich nur geht, wenn es auf das Jahr für die weitere Berechnung nicht ankommt, weil anderenfalls auch noch der 29.te eines Februars in Abhängigkeit von der Jahresangabe überprüft werden müßte.

Hmmmm...die Überprüfung scheint mir übrigens zunächst nicht so sicher wie die in Excel integrierte Gültigkeitsprüfung. Denn die eingebaute Gültigkeistprüfung läßt die Eingabe eines ungültigen Wertes grundsätzlich nicht zu. Dagegen führt

MsgBox "Bitte nur Werte zwischen 1 und 31 eingeben"
Cells(38, 8).Select

lediglich dazu, daß die Zelle mit dem fehlerhaften Wert markiert wird. Der Anwender kann das ohne weiteres umgehen. Daher habe ich noch ein ClearContents eingebaut. Wirklich 100 % zuverlässig ist wohl weder die in Excel eingebaute Prüfung noch dieser Workaround. Aber mit brute force kriegt man alles kaputt.

Vielen Dank nochmals!

Viele Grüße

Björn
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige