Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Über Umwege: eigenes "Autovervollständigen" | Herbers Excel-Forum


Betrifft: Über Umwege: eigenes "Autovervollständigen" von: Marco Bolten
Geschrieben am: 14.01.2010 02:21:40

Hallo zusammen,

ich würde gerne in einem Zellbereich eine eigene Autovervollständigen-Funktion einbauen, die aus einer Liste wahrscheinlicher Einträge bei Eindeutigkeit den Rest der Eingabe ergänzt (oder noch besser: so funktioniert, wie de VBA-Editor nach Eingabe des Punkts :-) Der Ergänzungsvorschlag soll möglichst in grau oder kursiv erscheinen

Idee 1: Worksheet_Change nutzen und Eingabe überwachen

Problem 1: im Edit-Modus der Zelle läuft keinerlei VBA. No chance.

--

Idee 2: wird die Zelle selektiert, setze ich stattdessen eine Textbox hin und fange darin die Eingaben ab. Das funktioniert fast:

Problem 2a: ich weiß nicht, wie ich den Cursor automatisch in die Textbox bekomme. Schreibt der User einfach drauflos, ist er wieder im Edit-Modus (siehe Problem 1, während der Eingabe feuert kein Event), klickt er (vor der ersten Eingabe!) in die Box, läuft es. Den Code, den ich dazu verwende, hänge ich mal unten an, allerdings ist "Eingabe" die Rich Textbox aus Idee 3 (s.u.)

Problem 2b: TextBox aus der Steuerelemente-Toolbox erlaubt keine unterschiedliche Formatierung von Text.

--

Idee 3: Rich TextBox V6.0 statt TextBox

Problem 3a: siehe Problem 2a

Problem 3b: auf Grund von Sicherheitsproblemen öffnet Excel > XP angeblich das Element gar nicht mehr. Es wird ein Workaround vorgeschlagen, in dem man das Element irgendwie in einem VB-Projekt kapselt. Aber ich habe leider nicht verstanden, was das bedeutet :-(
http://support.microsoft.com/kb/838010/en-us/

--

Idee 4: Textbox aus der Formularleiste soll der Sage nach unterschiedliche Formatierung zulassen

Problem 4: ich kann sie nicht hinzufügen (grau) und glaube, dass sie in Excel XP nicht mehr unterstützt wird. Stimmt das?

--

Idee 5: Textfeld aus den "Shapes" dafür benutzen

Problem 5a: Es gibt keine Events, wird hakelig zu programmieren

Problem 5b: Ich bekomme auch hier nicht den Cursor in den "Textframe" (Siehe Problem 2a)

Problem 5c: Der User kann die Form mit der Maus verschieben, ich habe es nicht geschafft, es zu "locken". In der englischen Bedeutung :-)

--

Idee 6: Gültigkeitsdropdown

Problem 6: Der User ist auf blödes Rumscrollen in einer Liste von bis zu 50 Namen angewiesen. Oder kann die Gültigkeitsprüfung in einem versteckten Feature auch autovervollständigen?

--

Idee 7: Microsoft Webbrowser im Edit-Modus/design mode

Problem 7: (Wie) bekomme ich den Webbrowser in den Editmodus? Und: ist das nicht ein wenig... hm... große Munition?

------------

Uff.

Da steh' ich nun ich armer Tor. Kann mir irgend jemand noch eine hübsche Idee nennen oder mir bei einem meiner zahlreichen o.g. Probleme helfen?

Beste Grüße und vielen Dank fürs "bis hierher Lesen"!

Jetzt der oben versprochene Code (Idee 3):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If (Intersect(Target, Range("b3:b52")) Is Nothing) Then
        Eingabe.Visible = False
        Exit Sub
    End If
    If (Target.Rows.Count > 1) Or (Target.Columns.Count > 1) Then Exit Sub

    Eingabe.Visible = True
    If Eingabe.Visible Then
        Eingabe.Activate
        Eingabe.Left = Target.Left - 5
        Eingabe.Top = Target.Top - 2
        Eingabe.Width = Target.Width + 10
        Eingabe.Height = Target.Height + 4
        Eingabe.Text = Target.Text
        Eingabe.SelIndent = 4
    End If
End Sub

Private Sub Eingabe_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
    Select Case KeyCode
    Case 9: 'tab: Vervollständigung akzeptieren
        ' (FEHLT HIER NOCH)
    Case vbKeyReturn:
        KeyCode = 0
        Range(ActiveCell.Address).Value = Eingabe.Text
        Eingabe.Text = ""
        Eingabe.Visible = False
        ActiveCell.Offset(1, 0).Activate
    Case Else:
        KeyCode = 0
        If Len(Eingabe.Text) > 2 Then
            Eingabe.Text = "" 'BLÖDFUG UM ZU SEHEN OB'S LÄUFT
        End If
            
    End Select

End Sub



  

Betrifft: Das xlAutovervollständigen reicht nicht? orT von: Luc:-?
Geschrieben am: 14.01.2010 02:28:42

Morn, Luc :-?


  

Betrifft: AW: Das xlAutovervollständigen reicht nicht? orT von: Marco Bolten
Geschrieben am: 14.01.2010 03:02:29

Hi Luc :-?
Vielen Dank für Deine Antwort.
Meines Wissens Kann man die "Autovervollständigung" nicht auf Werte einer Liste (in einem anderen Tabellenblatt/benannter Bereich) ändern, sondern sie nur so nutzen, wie sie da ist. In dem fraglichen Blatt (Eingabe) steht aber nichts oberhalb - also werden auch keine Vorschläge gemacht. Sollte es doch eine eingebaute Funktion dafür geben, würde ich einen Luftsprung machen - aber ich habe bisher nichts in der Richtung gefunden.

Weiß jemand Rat?

Beste Grüße!


  

Betrifft: AW: Über Umwege: eigenes "Autovervollständigen" von: Marco Bolten
Geschrieben am: 14.01.2010 14:08:35

Hi nochmal,

ich hatte vergessen, den "Frage noch offen"-Haken zu setzen, sorry. Vielleicht weiß doch noch jemand Rat?
Ich wäre sehr glücklich - ich habe jeden Weg versucht, den ich mir vorstellen oder zurechtsuchen konnte.
Ich habe das Gefühl, dass ein oder zwei meiner Ideen durchaus zielführend sein könnten - aber ich komme bei den Problemen ohne Hilfe leider nicht weiter.

Beste Grüße!


  

Betrifft: Ich meine Folgendes,... von: Luc:-?
Geschrieben am: 14.01.2010 16:56:50

...Marco:
In Xl sind schon standardmäßig ganze Wertereihen enthalten, die immer mit dem nächsten Wert fortgesetzt wdn, wenn du einen davon in eine Zelle schreibst und dann nach rechts oder unten ziehst (bei Kreuz an der rechten unteren Zellecke) bzw andersherum den vorherigen. Wenn du bspw Montag in eine Zelle schreibst, wird bei dieser Methode als Nächstes Dienstag erscheinen; andersherum Sonntag. Das kann man mit jeder beliebigen Reihe fester Werte machen. Man muss sie nur 1x aus der Mappe in das xlTool laden. Das ist auch für stets textgleiche, wiederkehrende Vorspalten u.ä. gut geeignet. Als so etwas hatte ich nämlich deine Anfrage interpretiert... Wenn es bei dir aber nicht um feste Reihenfolgen immer gleicher (auch unterschiedl mit anderen) Werte(n) , sondern um beliebige Folgen von Standardwerten geht, könntest du evtl das „normale“ Autoersetzen benutzen, so etwas wie schreibe ggf → erhalte gegebenenfalls...
Gruß Luc :-?


  

Betrifft: Coole Ideen! Leider nicht nutzbar :-( von: Marco Bolten
Geschrieben am: 14.01.2010 20:46:54

Hi Luc :-?.
vielen Dank für die beiden Ideen! Ich habe beide einmal ausprobiert (s.u.), aber leider lässt sich das Problem damit nicht lösen. Ich habe vielleicht nicht ganz konkret genug geschrieben, worum es geht:

Es geht um eine Datenverarbeitung, in der eine Liste von Schülernamen auf verschiedenen Blättern in jeweils unterschiedlicher Reihenfolge (und nicht immer vollständig) eingegeben werden muss.

Möglichkeit 1 (Wertereihe) fällt daher leider weg, da die Reihenfolge nicht gleich ist.

Für Möglichkeit 2 müsste der Benutzer aber wissen, wie genau der Name in "Autoersetzen" abgekürzt ist - denn er muss es ja mit Space "triggern", schreibt er einfach durch, findet keine Ersetzung statt. Bei "Quecke" reicht wahrscheinlich das "Q", bei "Meier, Heinrich" und "Meier, Mirko" bringt erst der achte Buchstabe Eindeutigkeit.

Trotzdem vielen Dank für Deine Ideen, darauf wäre ich absolut nicht gekommen - hätte klappen können!

Ich vermute, dass eine Lösung doch am ehesten über die "Abfangen"-Idee (TextBox, RichTextBox, Webbrowser) zu erreichen ist. Da die speziellen Einzelfragen glaube ich in meine ultralangen Anfrage etwas untergegangen sind, stelle ich sie noch einmal als einzelne Fragen ins Forum.

Beste Grüße,
Marco


  

Betrifft: OK, habe ich schon gesehen, aber so etwas... von: Luc:-?
Geschrieben am: 14.01.2010 23:52:14

...interessiert mich eigentlich wenig, Marco.
Wenn ich mal ein Problem in ähnlicher Richtung habe, dann löse ich das halt irgendwie — mir fällt dann schon was ein — aber so zwischendurch mal einfach über derartiges nachzudenken korreliert nicht mit meinem xl/vb-Fahrplan... ;-)
Gruß Luc :-?


  

Betrifft: Ok, trotzdem vielen Dank! (oT) von: Marco Bolten
Geschrieben am: 15.01.2010 00:29:01

.


  

Betrifft: GELÖST! von: Marco Bolten
Geschrieben am: 16.01.2010 04:17:48

Hi,

ich habe es letztlich doch hinbekommen - ich war ein Idiot! Ich habe jetzt erst fesgestellt, dass die Jungs von M$ gar keine schlechte Idee damit hatten, den "Ergänzungsvorschlag" einfach als selektierten Text darzustellen - das löst mehrere Probleme auf einmal - und ich brauche keine weitere Formatierung. Ich mache das Ganze jetzt mit einer ComboBox. die die Eingaben in eine Zelle abfängt.

Beispieldatei auf https://www.herber.de/bbs/user/67256.xls

Vielen Dank für Eure Hilfen!

Beste Grüße,
Sebastian