Über Umwege: eigenes "Autovervollständigen"
Marco
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