Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

ComboBox
#11
(09.06.2018, 09:08)shift-del schrieb: Wow, woher hast du das gewusst?

Moin!
Ich kenne das Internet auswendig.  :19:
Und im Ernst:
Der Code ist m.E. ausgesprochen ungelenk, wird in ernsthaften Anwendungen sicherlich nicht genutzt und hat sich mir allein deshalb eingeprägt.

Um mal zum Thema zu kommen:
Du musst anhand eines eindeutigen Kennzeichens (Primärschlüssel) die entsprechende Zeile ermitteln.
Ob Du dies per Range.Find-Methode machst:
Sub RPP1()
Dim Fund As Range, Zeile&
Set Fund = Tabelle1.Range("A:A").Find("Ulf", LookIn:=xlValues, LookAt:=xlWhole)
If Not Fund Is Nothing Then
  Zeile = Fund.Row
End If
End Sub

oder per WorksheetFunction.Match():
Sub RPP2()
Dim Zeile&
Zeile = WorksheetFunction.Match("Ulf", Tabelle1.Range("A:A"), 0)
End Sub

ist Geschmackssache.
Die Do While Schleife aus dem gelöschten Code von MW ist jedenfalls viel zu langsam und in meinen Augen ungelenk.

Wenn Du jetzt die Zeile hast, kannst Du mittels Cells(Zeile, Spalte).Value = ComboBox1.Text Deinen Wert übergeben.

Noch ein Zusatz zum gelöschten Code:
Es gibt nur sehr wenige Fälle, in denen eine List- oder Combobox per langsamer .AddItem-Methode gefüllt werden muss.
Besser füllt man sie in einem Rutsch mittels Listbox1.List = Range("xyz")
Lesefutter mit einem schier unerschöpflichen Repertoire:
http://www.snb-vba.eu/VBA_Fill_combobox_listbox_en.html

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)
Antworten Top
#12
Ich möchte mal etwas erläutern, warum ich das Beispiel von benannter Seite so daneben finde.
"Zur Sicherheit" beginne ich mit dem Copyright-Hinweis:
' ************************************************************************************************ 
' Autor/en: http://www.online-vba.de - Marc Wershoven
' Verwendung der Quelltexte auf eigene Gefahr!
' Es gelten die Nutzungsbedingungen von www.online-vba.de!
' Original-Quelltext: www.online-vba.de/vba_tutorialuserform.php
' ************************************************************************************************
Ich beginne mal mit dem UserForm_Initialize (welches sinnvollerweise ganz oben im Modul stehen sollte, hat etwas mit Programmierstil zu tun, aber das nur am Rande):
Private Sub UserForm_Initialize()
   Dim lZeile As Long
   
     'Alle TextBoxen leer machen
     TextBox1 = ""
     TextBox2 = ""
     TextBox3 = ""
     TextBox4 = ""
     TextBox5 = ""
     TextBox6 = ""
   
     'In dieser Routine laden wir alle vorhandenen
     'Einträge in die ListBox1
     ListBox1.Clear 'Zuerst einmal die Liste leeren
     
     lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
     'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
     Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
         
         'Aktuelle Zeile in die ListBox eintragen
         ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
         
         lZeile = lZeile + 1 'Nächste Zeile bearbeiten
         
     Loop
     
End Sub
Ich frage mich, warum man die Textboxes und die Listbox zurücksetzen soll, wenn sie doch beim Öffnen ohnehin leer sind! Huh
Die Variable ist auch nur notwendig, weil die Listbox so "seltsam" gefüllt wird.

Mal ein Code, wie ich so etwas angehen würde:
(mein Code macht das selbe wie obiger, allerdings in einem Bruchteil der Zeit (und mit weniger Bildschirmtinte))
Private Sub UserForm_Initialize()
With Tabelle1
  ListBox1.List = .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Value
End With
End Sub

Ich wollte zunächst den gesamten Code überarbeiten, würde dies aber nur machen, wenn jemand Interesse daran hätte.

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)
Antworten Top
#13
Ich hatte eine PN des TE erhalten, in der er nochmals auf die Übergabe der ComboBox hinwies.
Dies habe ich in #11 relativ ausführlich erklärt.
Wenn es anders gemeint war, dann brauche ich die Datei!
Den Copyright-Hinweis solltest Du aber vorher in Deinen Code einbauen.
(auch wenn ich dies niemals verlangen würde, wenn ich Code zur freien Verwendung schreibe;
bei einer kommerziellen Auftragsarbeit sieht das natürlich ganz anders aus)

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)
Antworten Top


Gehe zu:


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