autocomplete textbox / Bezug Quelle
#1
Hallo,

aus gegebenen Anlass strukturiere ich mein Userform um.
Am liebsten würde ich eine TextBox, die zur Eingabe des Namens verwendet wird, beim Schreiben automatisch durch die hinterlegte Namen aus fünf Tabellenblättern ergänzen lassen.

Habe im Netz gelesen, dass dies sowohl mit der TextBox als auch mit dem Combofeld möglich sein soll. Bezüglich der TextBox habe ich leider nur englische Kommentare ohne Code gefunden, die mir nicht weiter geholfen haben.
Meine erste Wahl wäre das Textfeld, da mir hier die Abfrage der Pflichteingabe einfacher erscheint.
Bei der Combobox bin ich soweit gekommen, dass er die Namen aus dem aktuell (activesheet) geöffneten Tabellenblatt ergänzt.

'Combobox unter inatilize

With ComboBox1
.ShowDropButtonWhen = fmShowDropButtonWhenNever
'.RowSource = Sheets("Tabelle8").Range("A1:A20") >>funktioniert garnicht Laufzeitfehler 9, Typenunverträglich
.RowSource = ("A1:A100") >>>immerhin aus dem activesheet

was nur selten das richtige ist, und ich bräuchte den Inhalt aus den fünf... am besten jedoch für die TextBox

Vielen Dank im Voraus
Top
#2
Hallo,

Code:
With ComboBox1
.ShowDropButtonWhen = fmShowDropButtonWhenNever
.RowSource = Sheets("Tabelle8").Range("A1:A20").Address    '>>funktioniert garnicht Laufzeitfehler 9, Typenunverträglich ---> Codename ist nicht gleich Tabellennname!!!!!!
.RowSource = ("A1:A100") '>>>immerhin aus dem activesheet
End With
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • soldblub
Top
#3
Morgen Stefan,


With ComboBox1
.ShowDropButtonWhen = fmShowDropButtonWhenNever
.RowSource = Sheets(Tabelle8).Range("A1:A20").Address

End With

Auch mit dem Zusatz Address funktioniert dies leider nicht.
Es ist tatsächlich Sheets(Tabelle8)

habe nun den Laufzeitfehler 13, Typen unverträglich
- er bietet mir über Strg+Leertaste auch weder Range noch Address an
ist ja meist ein Hinweis darauf, dass es dann auch nicht funktioniert

hast du eventuell noch eine Idee?

Oder hat jdm anderes vielleicht auch Erfahrung mit dem Autocompletemode bzw. autocompletesource ???
Top
#4
Hallo,

ich glaube, so ganz hast Du es mit Codenamen und Tabellennamen nicht verstanden (ich ändere es selbst auch mal, damit sich es auf die richtige Tabelle bezieht).

Code:
.RowSource = Tabelle8.Name & "!" & Tabelle8.Range("A1:A20").Address 'ausgewählt ist hier der Codename der Tabelle!


Angehängte Dateien Thumbnail(s)
   
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • soldblub
Top
#5
Moin auch von mir!
Zitat:er bietet mir über Strg+Leertaste auch weder Range noch Address an

Das ist logisch, da die Sheets()-Auflistung ja auch z.B. ein Diagrammblatt enthalten kann.
Da dies kein Range-Objekt besitzt, bietet VBA folglich auch kein Autovervollständigen an.

Ich würde im übrigen nicht über .RowSource gehen, sondern per .List füllen.
Edit: die .List-Methode funktioniert nur in einem UserForm.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • soldblub
Top
#6
Hallo,

bei RowSource, entweder wie Stefan in seinem letzten Beitrag oder auch einfach so:


Code:
.RowSource  = "Tabelle8!A1:A100"


RowSource nimmt man gewöhnlich, wenn man Überschriften braucht.

Sonst, wie Ralf es vorschlägt über .List Eigenschaft so:

Code:
ComboBox1.List = Sheets("Tabelle8").Range("A8:A100").Value
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • soldblub
Top
#7
@stefan

hatte ich schon verstanden, es war wirklich der Codename Tabelle8
habe bei über 30 Tabellenblätter keine unbenannten

diese Variante funktioniert:

.RowSource = Sheets(13).Range("B1:B25").Address

ist halt ein bißchen umständlich, wenn man von oben durchzählen muss- und ich bin mir noch unsicher was passiert wenn ich was verschiebe, lösche etc.
, mal schauen.
Top
#8
super, viele Lösungen für ein Problem.

Ich Danke Euch allen. Habe mal wieder viel gelernt.
Top
#9
@atilla

bekomme bei

ComboBox1.List = Sheets("Tabelle8").Range("A8:A100").Value
9: Index außerhalb des gültigen Bereichs

.List = Sheets(Tabelle8).Range("B1:B25").Value
13: Typen unverträglich?

doch nichts verstanden....

werde wohl in meinem activesheet viele ausgeblendete Spalten haben :(
Top
#10
Hallo,

Tabelle8 so wie bei mir ist der Name des Blattes den du auf dem Register siehst.
Wenn es der Code Name also im VBA Editor Tabelle8 ist, dann musst das so:



Code:
ComboBox1.List = Tabelle8.Range("A8:A100").Value
Gruß Atilla
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste