Clever-Excel-Forum

Normale Version: VBA: Einträge suchen und unterhalb eintragen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen, ich mal wieder...

ich habe wieder eine Frage, welche wohl für eich ziemlich einfach ist, mir aber mein VBA-Unwissen deutlich macht...

In einer UserForm habe ich ein Textfeld, welches entweder dessen Inhalt in Zeile 1 (ab Spalte K) einträgt (falls noch nicht vorhanden) oder generell danach sucht, wenn vorhanden.

Ist der Inhalt des Textfeldes in Zeile 1 ab Spalte K vorhanden, soll in der entsprechenden Spalte, wo die Find-Funktion "anhält" in der ersten freien Zeile der Eintrag der OptionButtons oder eines weiteren Textfeldes erfolgen.

Im Code habe ich es bereits hinbekommen, das in Spalte K alles korrekt eingetragen wird, geht's jedoch in Spalte L, wird der WErt des OptionButtons mit Lücken eingetragen (s. Beispieldatei).

Anbei der Code:
Code:
'Definitionen
lastSpalteProduktpalette = Tabelle2.Cells(1, Columns.Count).End(xlToLeft).Column + 1 'Sucht nächst-freie Spalte ausgehend Zeile 1 (Tabelle2)
lastZeileProduktpalette = Tabelle2.Cells(Rows.Count, 11).End(xlUp).Row + 1 'Sucht nächst-freie Zeile für Produktpalette

'Sucht in der ersten Zeile (ab K1 in Tabelle2) nach dem Namen des Lieferwerks und trägt die Produktart dort ein
If Tabelle2.Range("K1:ZZ1").Find(frmLieferwerkHinzufügen.txtNameNeuesLieferwerk.Value, , xlValues, xlWhole, xlByColumns) Is Nothing Then 'Prüft, ob Lieferwerk bzw. deren Produktpalette bereits vorhanden
    Tabelle2.Cells(1, lastSpalteProduktpalette) = frmLieferwerkHinzufügen.txtNameNeuesLieferwerk.Value
        For Each opt In frmLieferwerkHinzufügen.Controls
        If TypeOf opt Is MSForms.OptionButton Then
          If opt.Value = True Then Tabelle2.Cells(2, lastSpalteProduktpalette).Value = opt.Caption
          ElseIf txtProduktpaletteAndere.TextLength > 3 Then Tabelle2.Cells(2, lastSpalteProduktpalette).Value = txtProduktpaletteAndere
        End If
      Next
ElseIf Not Tabelle2.Range("K1:ZZ1").Find(frmLieferwerkHinzufügen.txtNameNeuesLieferwerk.Value, , xlValues, xlWhole, xlByColumns) Is Nothing Then
      For Each opt In frmLieferwerkHinzufügen.Controls
            If TypeOf opt Is MSForms.OptionButton Then
              If opt.Value = True Then Tabelle2.Cells(lastZeileProduktpalette, Tabelle2.Range("K1:ZZ1").Find(frmLieferwerkHinzufügen.txtNameNeuesLieferwerk.Value, , xlValues, xlWhole, xlByColumns).Column).Value = opt.Caption
              ElseIf txtProduktpaletteAndere.TextLength > 3 Then Tabelle2.Cells(lastZeileProduktpalette, Tabelle2.Range("K1:ZZ1").Find(frmLieferwerkHinzufügen.txtNameNeuesLieferwerk.Value, , xlValues, xlWhole, xlByColumns).Column).Value = txtProduktpaletteAndere
            End If
      Next
End If
Mir ist klar, dass mein Fehler in der Definition von "lastZeileProduktpalette" liegt, da er ab Spalte 11 zählt, aber ich muss zugeben, mir ist nicht klar, was ich eingeben muss, damit er die Einträge ohne Lücken einträgt.

Danke für eure Hilfe

HAMRacer44
Hallöchen,

Du suchst, wie Du schon selber festgestellt hast, die letzte belegte Zeile nur am Anfang in Spalte K

lastZeileProduktpalette = Tabelle2.Cells(Rows.Count, 11).End(xlUp).Row + 1 'Sucht nächst-freie Zeile für Produktpalette

Du müsstest das in der Spalte tun, wo der Treffer gelandet wurde...

Im Prinzip z.B. hier
Tabelle2.Cells(lastZeileProduktpalette, Tabelle2.Range("K1:ZZ1").Find(frmLieferwerkHinzufügen.txtNameNeuesLieferwerk.Value, , xlValues, xlWhole, xlByColumns).Column)

die lastZeileProduktpalette ersetzen durch

Tabelle2.Cells(Rows.Count, Tabelle2.Range("K1:ZZ1").Find(frmLieferwerkHinzufügen.txtNameNeuesLieferwerk.Value, , xlValues, xlWhole, xlByColumns).Column).End(xlUp).Row + 1

Ich würde übrigens, damit das Cells(...) nicht so lang wird, die Trefferspalte einer Variablen zuweisen. Das hätte noch den Vorteil, dass man die Variable auch mal schnell prüfen kann, ...
Hallo schauan,

Wahnsinn, was so "einfache" Lösungen möglich machen.

Habe den Code eingesetzt: funktioniert perfekt!

Vielen lieben Dank und Gruß
Domi