Hi Florian,
ich verstehe leider nicht was du genau wissen willst. Daher versuch ich's einfach mal:
Der obere Codebereich sucht nach dem ersten Treffer im Blatt Artikelstamm in Spalte B und zieht die Daten rechts davon (Offset = x Spalten nach rechts) in die erste Zeile, sowie ggf. in den Formularkopf.
Im unteren Teil wird geprüft ob es noch weitere Treffer gibt damit auch die anderen Zeilen gefüllt werden. Hier noch Felder im Formularkopf zu füllen macht keinen Sinn, da sonst die vorherigen Daten überschrieben werden. Es sei denn du machst das wieder als String (Textbox5006.value=Textbox5006.value & ", " &
NextCell.Offset(0, 7).Value). Wie du diesen ausliest und speicherst, siehst du am Feld Info1.
Wenn alle Treffer durchlaufen wurden, ist der nächste Treffer wieder der Erste. Dann wird die Schleife beendet.
Ich habe mit der fettgedruckten Änderung erreicht, dass die Anzahl der Zeilen in Textbox 5006 berechnet ausgegeben werden. Wenn du die stattdessen aus Spalte L übernehmen willst, musst du das entweder im oberen Teil machen (dann wird aber nur der erste Treffer übernommen) oder du legst in deinem Formular eine neue Spalte Textboxen an, die du dann wie bei den anderen Spalten im Initalize-Ereignis mit dem Klassenmodul verknüpfst. Dann könntest du z.B. Artikel(z).Verpackung = NextCell.Offset(0, 11).Value im unteren Code-Teil hinzufügen. (oder du nutzt die oben beschriebene String-Variante)
Ich wollte dir in diesem Thread eigentlich nur zeigen, dass man sich mit ein wenig Ahnung und Erst-Aufwand, die weitere Bearbeitung durchaus vereinfachen und den Code übersichlicher gestalten kann. Solltest du jedoch bei derartigen Änderungen am Formular auf Probleme stoßen, kann ich nur nochmal nach einer aktualisierten Beispieldatei fragen um dir hier weiter helfen zu können, da ich sonst nicht weiß, wo du welche Felder mit welchem Namen angelegt hast.
L.G. Mr. K.