Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Abfrage aktuelle Cursor-Position in Textbox

Abfrage aktuelle Cursor-Position in Textbox
Martin
Hallo liebe Excel-Gemeinde,
ich suche eine Möglichkeit die aktuelle Cursor-Position in einer Textbox abzufragen.
Mir ist durchaus bewusst, dass mit "SelStart" der Anfang eines markierten Textes abgefragt werden kann, der MEIST auch zugleich die Cursor-Position ist. Aber wenn der Text in der Textbox mit gedrückter Umschalt- bzw. Shift-Taste und der Pfeiltaste nach rechts markiert wurde, gibt Excel mit "SelStart" (selbstverständlich) die Position des ersten markierten Zeichens und nicht die aktuelle Cursor-Position wieder.
Für Antworten wäre ich - wie immer - äußerst dankbar!
Viele Grüße
Martin
Anzeige
selstart+sellength owT
16.01.2010 21:45:08
Rudi
Nein, genau das ist ja das Problem...
16.01.2010 22:20:50
Martin
Hallo Rudi,
Vielen Dank für deine Antwort. Der Ansatz ist schon richtig, aber woher weiß ich, ob nun "SelStart" oder "SelStart+SelLength" abgefragt werden muss? Oder anders gefragt: Woher weiß ich, ob der Cursor links oder rechts von der Markierung steht?
Viele Grüße
Martin
AW: Nein, genau das ist die Lösung
16.01.2010 22:54:18
Josef
Hallo Martin,
.SelStart gibt entweder die Cursorposition oder den Beginn der Markierung an.
Also ".SelStart + .SelLength" wenn du dahinter etwas einfügen willst, ."SelStart -1" wenn du davor etwas einfügen willst.
Gruß Sepp

Anzeige
was willst du bezwecken? owT
16.01.2010 22:54:38
Rudi
AW: was willst du bezwecken? owT
16.01.2010 23:57:32
Martin
Hallo Rudi,
ich habe mir eine eigene Autovervollständigung ein Texteingabe unter Berücksichtigung der Groß- und Kleinschreibung geschrieben (quasi eine benutzerdefinierte MatchEntry-Variante). Leider habe ich aber Probleme mit der Markierung, wenn ich mit Shift und Pfeiltasten innerhalb des Textes navigiere.
Viele Grüße
Martin
Anzeige
...hier noch mein Code
17.01.2010 00:14:52
Martin
Hallo,
vielleicht versteht ihr mein Problem mit dem Code etwas besser:
Private Sub ComboBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Autovervollständigung unter Beachtung Groß-/Kleinschreibung
Dim TempInhalt As String
Dim i As Integer
With ComboBox3
TempInhalt = Left(.Text, .SelStart) & Chr(KeyAscii)
For i = 1 To .ListCount
If Left(.List(i - 1), Len(TempInhalt)) = TempInhalt Then
KeyAscii = 0
.Value = .List(i - 1)
.SelStart = Len(TempInhalt)
.SelLength = Len(.Text) - Len(TempInhalt)
Exit For
End If
Next i
End With
End Sub
Die Combobox ist mit sehr vielen Einträgen in alphabetischer Reihenfolge gefüllt.
Viele Grüße
Martin
Anzeige
...hab vergessen die Frage noch offen zu lassen
17.01.2010 00:15:57
Martin
s.o.
Nutze das KeyUp-Ereignis der Textbox
17.01.2010 10:07:22
F1
oT
...das hilft nun leider überhaupt nichts...
17.01.2010 11:55:24
Martin
Hallo F1,
nimm mal den von mir geposteten Code, dann verstehst du vielleicht beim Problem.
Viele Grüße
Martin
Anzeige
Nach Forumsausfalls noch einmal "Frage offen"
18.01.2010 10:50:11
Martin
s.o.
;
Anzeige
Anzeige

Infobox / Tutorial

Abfrage der aktuellen Cursor-Position in einer Textbox in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Textbox erstellen: Füge eine Textbox in dein Excel-Formular ein.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Textbox-Event hinzufügen: Wähle die Textbox aus und öffne das Codefenster. Du kannst das KeyPress-Ereignis verwenden, um die Cursor-Position abzufragen.

  4. Code zum Abfragen der Cursor-Position:

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
       Dim cursorPos As Integer
       cursorPos = .SelStart
       ' Hier kannst du die Cursor-Position verwenden
    End Sub
  5. Cursor-Position bestimmen: Nutze SelStart für die aktuelle Cursor-Position. Um die Position des markierten Textes zu bestimmen, kannst du SelLength hinzufügen.

  6. Code anpassen: Je nachdem, was du mit der Cursor-Position machen möchtest (z.B. Text einfügen), kannst du den Code anpassen:

    If KeyAscii = vbKeyBack Then
       ' Beispiel für das Zurücksetzen der Cursor-Position
       .SelStart = cursorPos - 1
    End If

Häufige Fehler und Lösungen

  • Fehler: Cursor-Position wird nicht korrekt angezeigt
    Lösung: Stelle sicher, dass du die Cursor-Position im richtigen Ereignis abfragst. KeyPress ist oft sinnvoll, aber du könntest auch KeyUp verwenden, falls die Cursor-Position nach der Eingabe benötigt wird.

  • Fehler: Autovervollständigung funktioniert nicht richtig
    Lösung: Wenn du die Excel-Autovervollständigung nicht benötigst, kannst du sie mit folgendem Code ausschalten:

    Application.AutoComplete = False

Alternative Methoden

Anstelle des KeyPress-Ereignisses kannst du auch das Change-Ereignis verwenden, um die Cursor-Position zu überprüfen, wenn der Text in der Textbox verändert wird. Das kann nützlich sein, um sofort auf Änderungen zu reagieren.

Private Sub TextBox1_Change()
    Dim cursorPos As Integer
    cursorPos = .SelStart
    ' Hier kannst du Aktionen basierend auf der Cursor-Position durchführen
End Sub

Praktische Beispiele

Hier ist ein Beispiel, wie du die Cursor-Position in einer Textbox nutzen kannst, um Text an der aktuellen Cursor-Position einzufügen:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim cursorPos As Integer
    cursorPos = .SelStart
    If KeyAscii = vbKeyEnter Then
        .Text = Left(.Text, cursorPos) & "Neuer Text" & Mid(.Text, cursorPos + 1)
        .SelStart = cursorPos + Len("Neuer Text")
    End If
End Sub

Tipps für Profis

  • Nutze vba get cursor position in textbox und vba set cursor position in textbox Strategien, um effizient mit Cursor-Positionen zu arbeiten.
  • Experimentiere mit verschiedenen Ereignissen wie KeyUp oder LostFocus, um unterschiedliche Reaktionen bei der Textbearbeitung zu erzielen.
  • Achte darauf, dass die Textbox nicht zu viele Einträge hat, da das die Performance beeinträchtigen kann.

FAQ: Häufige Fragen

1. Wie kann ich die Cursor-Position in einer ComboBox abfragen?
Du kannst die Methoden SelStart und SelLength ähnlich wie in einer Textbox verwenden, um die Cursor-Position in einer ComboBox zu bestimmen.

2. Was ist der Unterschied zwischen SelStart und SelLength?
SelStart gibt die Position des ersten markierten Zeichens zurück, während SelLength die Anzahl der markierten Zeichen angibt. Um die Cursor-Position zu bestimmen, verwende SelStart + SelLength oder SelStart - 1, je nachdem, wo du Text einfügen möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige