Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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
Inhaltsverzeichnis

Cursorpositionierung unter erfolgreicher/negativer IF Beding

Cursorpositionierung unter erfolgreicher/negativer IF Beding
14.02.2024 18:56:59
Joachim Orlik
Hallo, ich möchte gerne Excel VBA für einen Basislevel erlernen und stehe schon vor meinem ersten Problem.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)


If Range("A1").Value > 4 Then
Call InfoboxAn
Application.EnableEvents = False
Range("A1").Select
Application.EnableEvents = True
Else
Call InfoboxAus
End If

End Sub


Kurze Anmerkung. Infobox ist eine selbst erstellte MsgBox, die für mich bessere Erkennbarkeit der Texte liefert.
Nun zum Problem:
Im Fehlerfall darf A1 nicht verlassen werden und die Infobox wird eingeblendet.
Im Else-Zweig wird die Box ausgeblendet, sofern die Bedingung fehlerfrei ist.
Ich möchte dann den Cursor in Zelle A5 setzen. Ich setze also unter den Call InfoboxAus den Befehl: Range("A5").Select
Das funktioniert auch sehr gut. Aber. Wenn ich nun in A1 den Zellinhalt ändern möchte, geht das nicht, weil der Cursor immer
wieder auf A5 springt. Ich kann in A1 also keine Änderung vornehmen.

Kann mir bitte jemand helfen, diese Funktion gängig zu bekommen? Im Voraus vielen Dank.

Gruß
Joachim

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Cursorpositionierung unter erfolgreicher/negativer IF Beding
14.02.2024 19:16:19
Yal
Hallo Joachim,

vielleicht so:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Target.Address = "$A$1" Then
If Target.Value > 4 Then
MsgBox "Werte in A1 muss unter 4 sein!"
Application.Undo 'die Eingabe in A1 wird widerrufen.
End If
End If
Application.EnableEvents = True
End Sub


Wenn Du den Code besser verstehen möchtest:
_ Code im Schritt-Modus laufen lassen (F8)
_ dabei das Lokalfenster offen halten (Ansicht, Lokalfenster), um den Zustand der Variablen zu sehen.
_ neugierig sein: was steckt in dem Objekt hinter den "+"?
_ Überwachungsausdrücke verwenden: Variable oder Ausdruck markieren, Rechtsklick auf "Überwachung hinzufügen..."
_ Variable verwenden, nur um deren Stand im Lokalfenster zu beobachten.
_ auch gut: Debug.Print xxVariableName, druckt den Zustand einer Variable in das Direktfenster.
_ wenn ein VBA-Begriff nicht bekannt ist, Cursor drauf platzieren und Strg+F1, um an der Online-Hilfe zu gelangen. Dort sich die Zeit nehmen, grundlich zu lesen (die Aufmachung ist nur am Anfang gewöhnungsbedürftig) und die gegebenen Beispiele anzuschauen.
_ wenn die erste Schritte schon gemacht sind, das Objektkatalog anschauen (Ansicht, Objekt-Katalog)

VG
Yal
Anzeige
AW: Cursorpositionierung unter erfolgreicher/negativer IF Beding
14.02.2024 20:12:32
Joachim Orlik
Hallo Yal,
danke für die schnelle Antwort und das Codebeispiel.
Leider funktioniert es nur zusammen mit der Excel MsgBox. Das nützt mir leider nichts, da ich sehbehindert bin.
Auch wird der Cursor nicht auf A5 gesetzt, wenn die Bedingung erfüllt ist.
Wenn ich Deinen Code mit meiner Infobox ausführe, kommt es zum Laufzeitfehler 1004 Expecting Object to be local beim Application.Undo
Ich nehme mal an, dass es mit meiner Infobox zusammenhängt. Gibt es eine andere Lösungsmöglichkeit mein Anliegen umzusetzen?

Kurz noch zu mir. Ich programmiere VBA in MS Access mit Form und Datenbankdesign. Feldprüfungen und Cursorpositionierung sind dort völlig
anders und aus meiner Sicht auch viel einfacher zu programmieren. Aus diesem Umfeld kenne ich natürlich auch den Debugger und seine Funktionen.

VG
Joachim

Anzeige
AW: Cursorpositionierung unter erfolgreicher/negativer IF Beding
14.02.2024 20:53:32
Yal
Hallo Joachim,

versuche diese angepassten Code: der MsgBox wird erste nach dem Undo angezeigt und wenn die Bedingung = 4 erfüllt ist, wird der Cursor auf A5 positioniert.

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Target.Address = "$A$1" Then
If Target.Value > 4 Then
Application.Undo 'die Eingabe in A1 wird widerrufen.
MsgBox "Werte in A1 muss unter 4 sein!"
Else
Range("A5").Select
End If
End If
Application.EnableEvents = True
End Sub


VG
Yal
Anzeige
AW: Cursorpositionierung unter erfolgreicher/negativer IF Beding
14.02.2024 20:55:47
Joachim Orlik
So funktioniert es, wie es soll.
Private Sub Worksheet_Change(ByVal Target As Range)


Application.EnableEvents = False

If Target.Address = "$A$1" _
And Target.Value > 4 Then
Call InfoboxAn
Range("A1").Select
Else
Call InfoboxAus
Range("A3").Select
End If
Application.EnableEvents = True

End Sub


Danke für den Denkanstoss.
VG
Joachim

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige