Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Optimierung per VBA Code

Optimierung per VBA Code
06.01.2019 15:38:19
Markus
Hallo Forum Mitglieder,
ich suche eine optimierte Lösung eventuell über VBA-Code. Leider habe ich in Sachen VBA nur geringste Kenntnisse.
Beruflich muss ich eine Excel Datei (12 Arbeitsblätter=12 Monate) mit insgesamt bis zu 55000 Einträgen (Zeilen) verwalten. Es handelt sich um Einschreiben die tagtäglich verschickt werden. Eine Testdatei befindet sich im Anhang.
Istzustand:
Von den verschickten Einschreiben kommen, Tage später oder auch Wochen, bis zu 4500 St. (Rückläufer) im Jahr zurück, die nicht zugestellt werden konnten, verschiedene Gründe (Verzogen, Verstorben, Annahme verweigert usw.). Diese muss ich kenntlich machen bzw. verwalten. Bislang habe ich das über die Suchfunktion von Excel gemacht. Dazu musste ich jede Sendungs-Nr., (wird auf jedem Briefumschlag per Barcode-Frankatur aufgedruckt), einzeln im Suchfenster eingeben und mit Enter bestätigen. Der entsprechende Eintrag wurde dann in der entsprechenden Spalte u. Zeile markiert (jede Sendungs-Nr. ist einzigartig u. wird nur einmal vergeben). Anschließend muss ich in der entsprechenden Zeile noch mehrere Zellen mit Werten ausfüllen.
Sollzustand:
Optimieren mit einem VBA-Code. Ich möchte die Rückläufer demnächst mit einem Barcode Scanner einlesen, dazu muss folgender Ablauf gewährleistet sein.
1.Ein Eingabefenster, welches auf allen 12 Arbeitsblättern erscheint, wo der Barcode eingelesen wird.
2.Dann soll in Spalte L die entsprechende Zelle ausgewählt werden (z:B. L5) (es muss aber in allen Arbeitsblättern (01-12) nach dem richtigen Eintrag gesucht werden. Ist dies geschehen soll sich das Eingabefenster (Barcodelesung) für den nächsten Vorgang (Rückläufer) wieder leeren.
3.Dann soll von der aktiven Zelle L5 (im richtigen Arbeitsblatt) nach T5 (selbe Arbeitsblatt) gesprungen werden
4.in den Zellen T5, U5 und V5 erfolgt händisch eine Eingabe
5.Sobald in T5 eine Eingabe erfolgt, soll in W5 das aktuelle (Heute) Datum erscheinen
6.Zelle X5 wird mittels Formel (Differenz zwischen W5 und C5) errechnet
Zusätzliche Bemerkungen:
Die Spalten A-J werden teilweise händisch oder per CSV-Datei gefüllt
Spalte K ist eine fortlaufende Nummer, wobei sich nur die letzte Ziffer (Prüfziffer) ändert. Diese Prüfziffer wird in den Spalten O-S berechnet. Die Spalten O und P werden dann in Spalte K zusammen mit einer bedingten Formatierung dargestellt.
Die Spalten bzw. Zellen L-N werden mit einer CSV-Datei von der Frankiermaschine befüllt.
Anschließend erfolgt noch eine Prüfung der beiden Spalten K und. L. siehe Beispiel
Ist die Zelle L10 identisch mit Zelle K10, so färbt sich K10 grün ein andernfalls bleibt Zelle K10 rot. Siehe Beispiel L11 K11
Für jegliche Info bzw. Verbesserungsvorschläge und Lösungen bin ich sehr dankbar, und sage allen schon mal Danke und großes Lob.
Userbild

44
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Optimierung per VBA Code
06.01.2019 15:47:10
Daniel
HI
das wichtigste wäre erstmal, die 12 Tabellenblätter in einer Tabelle zusammenzuführen.
den Monat kannst du ja in einer weiteren Spalte angeben.
dann kansnt du einfach die Nummern der Rückläufer, die du bearbeiten musst in einer zweiten Tabelle untereinander aufführen.
in der Haupttabelle kannst du dann in einer Hilfsspalte mit ZählenWenn überprüfen, ob die Sendungsnummer in der Liste der Rückläufer vorkommt und dir dann mit dem Autofilter nach dieser filtern oder die Liste nach dieser Hilfsspalte sortieren, so dass du die Zeilen mit den Rückläufern, die du bearbeiten musst, direkt untereinander stehen hast und nicht suchen musst.
Gruß Daniel
Anzeige
AW: Optimierung per VBA Code
06.01.2019 15:57:51
Markus
Hallo Daniel, danke für die schnelle Antwort. Die 12 Arbeitsblätter sind schon in einer Datei. Ich möchte aber, sobald ich einen Rückläufer habe egal aus welchem Monat und diesen per Barcodescanner einlese das mir die entsprechende Zelle auf dem entsprechenden Arbeitsblatt markiert wird und ich die entsprechende Zeile vervollständigen kann. Des weiteren werden alle Arbeitsblätter am Ende des Jahres zu Statistik Zwecken ausgewertet. (Laufzeiten, Einschreiben pro Abteilung usw.)
Gruß Markus
AW: Optimierung per VBA Code
06.01.2019 17:20:27
Daniel
Funktioniert auch mit 12 Blättern
Du musst dann die Hilfsspalte mit der ZählenWenn-Formel in allen 12 Blättern hinzufügen und in 12 Blättern nach den Zellen suchen, bei denen das Ergebnis dieser Formel 1 ist
Gruß Faniel
Anzeige
AW: Optimierung per VBA Code
06.01.2019 18:01:00
Markus
Danke Daniel, das ist aber nicht der Weg den ich gerne hätte
AW: Testdatei
06.01.2019 21:50:22
Luschi
Hallo Markus,
leider kann sich kaum noch jemand an das alte und bewährte EDV-Prinzip 'EVA' erinnern. Dort war eine strikte Trennung von Eingabe-Verarbeitung-Ausgabe vorgesehen. Heute sollen die Daten nach der Eingabe sofort an die richtige Stelle verschoben und dabei gleich noch schön formatiert werden.
Hierfür wäre dann aber der massive Einsatz von Vba erforderlich.
Doch Excel bietet soviele Funktionen, die das mit weniger Vba-ManPower aber eben auch mit ein bischen Nachdenken schneller hinkriegen kann.
Hier mal mein Vorschlag:
Die Rückläufer sammelt man in einer einzigen Tabelle und ergänzt dort die nötigen Daten manuell.
Den Rest machen dann Wennfehler/Index/Vergleich.
Und die 12 Tabellen klingt doch sehr stark nach Monaten erfaßte Sendungen. Wenn das der Fall ist, dann sollte auch hier eine Tabelle genügen. Für die monatlichen Übersichten genügt dann der Autofilter oder Vba/AdoDB für Listenförmige Abfragen wie in Access üblich - das geht auch in Excel-Vba.
Übrigens: die enthaltenen Formeln wurden nur einmal in der Zelle 'T2' erstellt und dann per Maus nach recht und unten aufgefüllt.
https://www.herber.de/bbs/user/126542.xlsx
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Testdatei
06.01.2019 22:39:30
Markus
Hallo Luschi
vielen Dank. Auf den ersten Blick sieht es schon sehr viel versprechend aus. Ich werde es morgen in aller Ruhe mal testen und mich anschließend bei dir wieder melden. Danke nochmal und einen schönen Abend noch. Gruß Markus
AW: Optimierung per VBA Code
06.01.2019 22:14:40
Piet
Hallo Markus
anbei deine Beispieldatei mit einem Code zurück der noch nicht optimal ist. Ein Erstversuch!
Ein Problem ist, wie komme ich an die Scanner Daten heran? Mit Barcode Scanner habe ich nie gearbeitet!!
Diese Lösung erwartet die Daten in der Tabelle "Scanner" in Zelle C1 und sucht sie in allen Tabellen. Wird der Wert gefunden kommt die Frage ob man buchen will? Wenn Ja wird Datum und Formel automatisch eingefügt, und die richtige Zeile in Spalte T angesprungen.
Eine andere Überlegung ist zuerst alle Scanner Daten in Tabelle Scanner zu sammeln, alle Daten zu suchen, sich die Adresse notieren, und eine Tabelle nach der anderen abarbeiten. Was haelst du von dieser Idee?
Das ist ja nur ein Erstversuch, jetzt müssen wir uns irgendiwe an eine bessere Lösung herantasten.
mfg Piet
https://www.herber.de/bbs/user/126543.xlsm
Anzeige
AW: Optimierung per VBA Code
06.01.2019 22:40:29
Markus
Hallo Piet
vielen Dank. Auf den ersten Blick sieht es schon sehr viel versprechend aus. Ich werde es morgen in aller Ruhe mal testen und mich anschließend bei dir wieder melden. Danke nochmal und einen schönen Abend noch. Gruß Markus
AW: Optimierung per VBA Code
07.01.2019 19:52:18
Markus
Hallo Piet,
heute konnte ich deine Testdatei ausgiebig testen. Erst einmal ein großes Lob, bis jetzt macht es schon vieles einfacher. Wie du schon geschrieben hast als Erstversuch top. Jetzt habe ich natürlich noch ein paar Wünsche oder Verbesserungen. Ob man das alles mit Hilfe von VBA umsetzen kann, muss du entscheiden. Ich habe von VBA nur geringste Kenntnisse, wird sich ändern.
Fragen u. Info‘s
1.Deine Testdatei habe ich genauso belassen, wie von dir erstellt.
2.Kann ich die Datei einfach umbenennen und später auch als Vorlage mit Makro speichern
3.Kann ich meinen Datenbestand aus dem Vorjahr, einfach in die Tabelle1 kopieren. Der Aufbau ist identisch.
4.Kann ich die Tabelle1 einfach umbenennen. z.B. Erfassung oder Daten
5.Kann man die Tabelle1 später einfach um ein paar Spalten erweitern
6.Wozu dient das Tabellenblatt Sayfa2
7.Kann man später Arbeitsblätter zur Datei hinzufügen
8.Was ist das für eine Bedingte Formatierung (=$T2““) die sich auf Spalte K bezieht. Sowas kenn ich überhaupt nicht, ein bisschen kann ich folgen, wenn z.B. T2 gefüllt wird ändert sich in K2 die Farbe, aber ““ sagt mir garnichts.
Wünsche u. eventuelle Verbesserungen
1.Ein Tabellenblatt (bei dir jetzt Tabelle1) für alle Monate, vielleicht wird es für dich dann etwas einfacher, und ich brauch nicht mehr so oft die Blätter wechseln. Dieses eine Tabellenblatt würde ich gerne unter Formeln/Namensmanager als Datenbank (A1:X60000) festlegen (ich hoffe das macht Sinn).
2.Ich würde gerne jeden Rückläufer einzeln scannen (mit Handscanner, der linke Barcode (siehe Foto-Link) wird am Ende um 5 Stellen gekürzt (ist immer identisch) eingelesen und dann in den jeweiligen Spalten T U und V in der betreffenden Zeile meine Eingaben machen. Somit brauch ich den Rückläufer nicht noch einmal in die Hand nehmen.
Gewünschter Arbeitsablauf (ich benutze jetzt deine Blattnamen u. Zellpositionen
1.Rückläufer scannen in Scanner/C1
2.Scanner/Daten suchen
3.Tabelle1/Ergebnis K2 mit Ja bestätigen und W2 und X2 werden gefüllt
4.Wenn W2 mit Datum gefüllt wird hätte ich gerne das Zeile 2 von B2:X2 mit einer hellen Füllfarbe (schwarze Schrift/Lesbarkeit) eingefärbt werden (K2 wurde bislang durch Eingabe in T2 andersfarbig (vorher grün) dargestellt
5.Schön wäre es bei Bestätigung von „Ja“ in die Zelle T2 gesprungen werden kann, und ich dort meine Eingaben nach einander (T2, U2, X2) machen kann
6.Nach Eingabe in X2 (Bestätigung mit Enter) sollte in Scanner/C1 (leere Zelle) gesprungen, so dass ich den nächsten Rückläufer einscannen kann
7.Schleife für weitere Sprünge
Piet, ich hoffe das sind nicht zu viele Wünsche. Ich weiß auch nicht, ob die alle umsetzbar und sinnvoll sind, aber eins steht fest, ich werde mich mit Literatur in Sachen VBA eindecken. Wenn du irgendwelche Literatur empfehlen kannst, so schreib es mir bitte. Das es diese Möglichkeiten in VBA gibt hätte ich nicht für möglich gehalten.
https://www.herber.de/bbs/user/126560.jpg
Barcode Foto
Gruß Markus und TAUSEND Dankeschön !
Anzeige
AW: Optimierung per VBA Code
08.01.2019 15:27:50
Piet
Hallo Markus
zunaechst einmal freue ich mich über deine Rückmeldung und das dir mein Erstversuch gefallen hat.
Ja, ich bin an einer Zusammenarbeit interessiert, wir sollten die Sache so weit es geht optimieren.
Ich habe noch nicht alle Fragen gelesen, (sehr umfanrfeich) kann aber vorab die ersten beantworten:
Sayfa2 ist türkisch = Seite und dient mir als Info Blatt. Für dich unwichtig. - (Türkischer PC, 2. Hand, keine Umlaute!)
Die Fragen 2-7 kann ich mit "Ja" beantworten, das Makro muss dann ggf. angepasst werden. (lernst du evtl. auch noch)
Zur Frage 8: - keine Ahnung über Spalte K, ich habe deine Testdatei unveraendert übernommen! Was da an bedingter Formatierung drin ist weiss ich nicht. Damit kenne ich mich auch nicht aus. Da ist mir lieber wenn du das selbst bearbeitest, oder Kollegen fragst. Mein Fach ist VBA, Makros programmieren.
Zur Eingabe eine Frage:
Ich sehe im Scanner Bild das es bestimmte Gründe für Rücklaeufer gibt. Waere es sinnvoll statt über InputBox eine Userform zu entwickeln, wo du die Gründe nur anklcken brauchst? Was ist mit Spalten "U + V", gibt es da auch Konstante Werte für Vs-Nr und Abteilung, oder ist jeder Wert anders?
Zur Spalte X: - Das Datum wird in W automatisch einetragen, und in Spalte X eine Formel zur Tageberechnung. D.h., in Spalte X kann man nicht von Hand eingeben. Über eine UserForm ist das nicht nötig, die muss ich mir aber erst mal ausdenken. Bis dahin kann man den Rücksprung machen bei Eingaben in Spalte V für Abteiung. Ich muss nur wissen wo der Cursor dann hinspringen soll?
Eien andere frage ist ob man die Scanner Daten direkt in Tabelle1 in eine Zelle einlesen soll?
Falls ja must du bitte selbst festlegen in welche? Ich richte mich da nach dir, weil du damit arbeitest. Somit hast du den besseren Überblic was für dich günstiger oder optimaler ist.
Jetzt lese ich mir die weiteren Wünsche durch und schaue was du antwortest. Das ist keine 5 Minuten Arbeit ....
Ich bitte um Geduld das ich auch andere Arbeit habe, nicht jeden Tag im Forum bin. Frohes schaffen
mfg Piet
Anzeige
AW: Optimierung per VBA Code
08.01.2019 20:02:58
Markus
Hallo Piet, danke für das Feedback.
Fragen u. Info’s
Frage 1-7 können wir so belassen und gilt als beantwortet.
Frage 8 habe ich abgeändert, sobald ein Wert in W2 erscheint (es wird ja automatisch das aktuelle Datum eingefügt), wird die Zeile 2 von B2 bis X2 farblich markiert, sodass man auf Anhieb diese Zeile als Rückläufer erkennen kann. In die Zellen (Spalte Grund) T2, T3 usw. kommen nur Zahlenwerte von 1 bis 9 vor.
Zu deiner Frage „Zur Eingabe eine Frage“
In Zelle T2 (Spalte Grund) werden nur Ziffern 1-9 eingetragen und ist schnell erledigt. Ich würde es so belassen wie es ist.
Zur Spalte X
Du hast recht die Zellen in Spalte X werden automatisch berechnet und geben die Laufzeit des Rückläufers in Tagen an. Kann so bleiben. Die Zellen in Spalte Abteilung V2, V3 usw. bekommen meistens alle verschiedene Einträge / Kürzel. Momentan haben wir (ich glaube 53 Abteilungern, wenn ich auf den aktuellen Stand bin). Diese Kürzel sind meistens dreistellig und setzen sich aus Buchstaben und Ziffern zusammen. (AU, K21, SA und und). Ist händisch schnell erledigt. Kann so bleiben.
Zu deiner Frage „Wo soll der Cursor hinspringen“
NEU "Tabelle1 Zelle Y1"
1.Rückläufer scannen in "Tabelle1 (Scanergebnis in Y1)"
2."Tabelle1 Zelle Z1" „Daten suchen“ MAUSKLICK
3. Dann wird K2 aktive Zelle (W2 und X2 werden automatisch gefüllt und die Zeile 2 von B2 bis X2 wird eingefärbt) (falls gefunden), wenn ja soll gleich in Zelle T2 gesprungen werden, dort mache ich meine Eingabe, bestätige mit Enter, Cursor springt nach rechts (U2), dort mache ich meine Eingabe, bestätige mit Enter, Cursor springt nach rechts (V2), dort mache ich meine Eingabe wieder und dann wäre es
SUPER, wenn ich mit TAB Taste bestätige das die Zelle Y1 wieder aktiv und LEER ist, sodass ich den nächsten Rückläufer einlesen kann.
Deine nächste Frage
Habe ich mir auch schon überlegt. Der Vorschlag ist super. Ich würde die Zelle C1 und das Steuerelement vom „Scanner Tabellenblatt“ in Tabelle1 Y1 und Z1 legen.
Hier noch der Datei-Link. Habe die Bedingte Formatierung abgeändert und Zeile 2+3 vervollständigt, alles andre ist geblieben.
https://www.herber.de/bbs/user/126584.xlsm
Danke Piet
Anzeige
AW: Optimierung per VBA Code
09.01.2019 18:13:49
Piet
Hallo Markus
anbei die neue Datei mit geaenderter UserForm, alles TextBoxen + eine - Unsichtbare ComboBox!!
In der Tabelle habe ich die Spalte "AB" zur Prüfung der Abteilungen auf Tipp Fehler neu eingefügt.
Ob du das benutzen willst oder nicht möust du selbst entscheiden. Im Makro kann man die Prüfung abschalten!!
Oben gibt es eine Const Anweisung die jetzt auf "Ja" steht, bei "No" wird Abteiungen NICHT geprüft!
Die unsichtbare ComboBox bezieht sich auf diese Prüfung. Wenn eine Eingabe ins Textfeld falsch ist wird die ComboBox aktiviert, und das Textfeld übernimmt den Wert aus der ComboBox. Im normalen Betrieb ist diese Box unsichtbar, weil Handeingabe schneller geht!
Wenn du diese Prüfung nicht brauchst kannst du den ganzen Teil im Makro löschen, er ist durch "**" markiert!
Den Grund prüfe ich auf die Zahl 1-9, gibst du Text oder eine falsche Zahl ein wird die Eingabe verweigert.
Würde mich freuen wenn wir diese Aufgabe so gut wie möglich optimiert bekommen. Viel Spass beim testen.
mfg Piet
https://www.herber.de/bbs/user/126618.xlsm
Anzeige
AW: Optimierung per VBA Code
08.01.2019 20:07:39
Piet
Hallo Markus
anbei die Beispieldatei mit Tabelle1 -ohne Scanner Blatt- zurück. Dafür mit der neuen UserForm1
Ob die UserForm beim Barcode einlesen geöffnet bleiben kann ist die gute Frage? Ich weiss es nicht!
Die neue Datei hat in Tabelle1 in "AA1" die Eingabezelle für den Barcode. Erledigte werden in AA3 angezeigt. Dadurch hast du eine Kontrolle welche Eingabe zuletzt bearbeitet wurde. Ich halte es für sinnvoller direkt in Tabelle1 zu bleiben.
Die UserForm hat ebenfalls eine Status Anzeige, zeigt den zuletzt bearbeiteten Barcode oben links an. Wenn in Zelle AA1 eine neuer Barcode auftaucht sollte die Userform das mitbekommen und automatisch weiterarbeiten (wenn es klappt!!)
Alles ist aber noch Entwiccklungsphase, deshalb bitte deine Daten ins Beispiel kopieren und dort testen. Da zerstörst du keine Original Daten, falls das Makro noch fehlerhaft sein sollte! Neue Codes bitte immer zuerst in der Beispiel Datei gründlich testen!!!
Wenn alles einwandfrei laeuft kannst du das Makro ins Original übernehemn. Jetzt warte ich mal den Praxis Test ab!
PS: - gibt es für VS-Nr und Abteilung feste Werte die man in eine ComboBox laden könnte, statt Textfeld Eingaben?
mfg Piet
https://www.herber.de/bbs/user/126583.xlsm
Anzeige
AW: Optimierung per VBA Code
08.01.2019 20:38:37
Markus
Hallo Piet
die Datei werde ich gleich mal testen. Bezüglich deiner Combobox halte ich es nicht für sinnvoll.
1. Die VS-Nr. ist immer unterschiedlich.
2. Die Abteilungen (53) finde ich zu umfangreich für eine Combobox, dann muss ich bestimmt viel scrollen. Ich denke das ich dort mit einer Texteingabe schneller unterwegs bin.
Gruß Markus
AW: Optimierung per VBA Code
08.01.2019 20:49:17
Markus
Hallo Piet,
auch nicht schlecht mit Combobox. Ich habe dich da wohl missverstanden. Ich dachte du meinst eine DropDown Box. Aber meinst du nicht das ich anders schneller unterwegs bin, wie in meinem ersten Artikel von heute beschrieben. Den hattest du da bestimmt noch nicht gelesen, wo du mir geschrieben hast.
Gruß Markus
AW: Optimierung per VBA Code
09.01.2019 15:16:47
Piet
Hallo Makrus
du hast Recht, als ich meine neue Beispieldatei ins Forum stellte hatte ich deinen Artikel noch nicht gelesen!
Kann auch an der Zeitvertschiebung liegen, mein Standort ist Ankara. - Überrascht?
Also gut, da hatten wir beide die gleiche Idee, die Scanner Eingabe direkt in Tabelle1 zu verlegen. Die Zelle zu aendern dürfte für dich kein Problem sein. Ich übernehme hier im Beispiel deine Angaben. Zum Grund, es geht sicher schneller die linke Seite mit OptiınButton durch ein Textfeld für 1-9 zu ersetzen. Das ist sinnvoller. Auch die anderen Sachen sollten dann so bleiben.
Wichtige Frage, weil ich es von hier nicht sehe, und nicht prüfen kann: - klappt die Scanner Eingabe auch bei geöffneter UserForm, das jede neue Eingabe in Zelle "Y1" auch in der UserForm erscheint? Das waere dann ja optimal.
Noch eine frage aus reiner Neugier: - Gibt es für das Problem Rücklaeufer keine offizielle Version der Post?
Dann könntest du deine Excel Datei, wenn alles funktioniert, als Verbesserungsvorschlag einreichen.
Wo ungefaehr arbeitest du? Meine Heimatstadt ist Köln.
mfg Piet
AW: Optimierung per VBA Code
09.01.2019 18:13:08
Markus
Hallo Piet, ich komme ebenfalls aus NRW, aber Münster, ist dir bestimmt ein Begriff. Vielen Dank, ich werde es gleich mal testen und dann deinen zweiten Post von heute lesen. Eine Frage noch vorab, was meinst du mit UserForm.
"klappt die Scanner Eingabe auch bei geöffneter UserForm, das jede neue Eingabe in Zelle "Y1" auch in der UserForm erscheint? Das waere dann ja optimal."
Das Programm bei der gelben Post hieß PostKit und wurde zum Jahresende eingestampft. Eine Oberfläche für Rückläufer hatte das Programm aber auch nicht, war wohl nicht im Interesse der Gelben. Einen Nachfolger für das Programm ist noch in der Entwicklung.
Gruß aus Münster nach Ankara
AW: Optimierung per VBA Code
09.01.2019 18:34:29
Piet
Hallo Markus
habe gerade erst deine letzte Nachricht gelesen. Ja herzliche Grüsse nach Münster, gehörte zu meinem Revier als ich in jungen Jahren als Servicetechniker unterwegs war. Minden + Melitta ist mir auch ein Begriff, für die hatten wir als Unterlieferant gearbeitet.
Unter geöffneter Userform verstehe ich den Botton der die Userform öffnet, damit du statt direkt in die Zellen deine Eingaben in die drei Textfelder der Userform machen kannst. Das UF Programm sucht die richtige Rücklaeufer Nr. und verbucht alles in einem Rutsch, mit Tippfehler Prüfung! Ich prüfe den Grund auf Zahl 1-9, prüfe auf Text! Und verweigere die Eingabe bei Fehleingabe!
Vorgesehen ist eien Prüfung auf richtige Abteilung in der Spalte AB. Dort kannst du eine Liste aller Abteiungen erstellen.
Falls nicht gewünscht kann man die Prüfung durch "No" in Const AbtPrüfung = "No" abschalten!
Optimal waere wnn man die Userform nicht schliessen muss, sondern Scannen kann, und ide neue Nummer sofort in der Userform zum verarbeiten erscheint. Ob das einwandfrei klappt ist mir unbekannt. Im Klartext, du kannst alle Sendungen in einem Rutsch abarbeiten! Hier fehlt mir aber Wissen und praktische Erfahrung ob das in der Praxis klappt oder nicht?
Wenn es kein neues Programm gibt dann lass uns die Sache Postgerecht optimieren und stelle deinem Vorgesetzen das Programm als sinnvollen Ersatz vor. Würde mich sehr freuen wenn das klappt.
mfg Piet
AW: Optimierung per VBA Code
09.01.2019 19:37:12
Markus
Hallo Piet,
hab es getestet.
Unter geöffneter Userform kann der nächste Rückläufer nicht eingescannt werden, weil die Scanzelle erst wieder aktiv wird wenn Userform geschlossen wird.
Gruß Markus
AW: Optimierung per VBA Code
09.01.2019 21:23:20
Piet
Hallo Markus
habe dein Nachticht gerade gelesen, dazu habe ich eine Frage:
befindet sich in der Tabelle1 im Blatt selbst das Makro für die Target Aktion bei Eingabe in eine Zelle?
İm alten Target Makro prüfte ich die Eingabe Adresse auf Zelle "AA1", nicht auf die neue "Y1" Zelle!
Wenn das Makro fehlt, oder meine alte Adresse "AA1" drin ist kann der Übertrag in die UserForm nicht klappen!!
Schaue mal im neuen Beispiel, da ist auch das Makro für Datum setzen bei Eingabe des Namens in Spalte E!
Zusaeztlich schreibt das Makro die Lauf-Nr automatisch weiter, die Lauf-Nr Spalte kannst du überspringen.
Für den Scanner haengt alles davon ab ob das Target Makro beim einlesen in Zelle "Y1" aktiv wird.
Im alten Makro hatte ich für Target die Zelle "AA1" vorgesehen. Kann sein das es deshalb nicht klappt?
Würde mich freuen wenn du das mit dem neuen Makro noch einmal testen kannst.
mfg Piet
AW: Optimierung per VBA Code
09.01.2019 15:41:04
Piet
Hallo Markus
mir ist gerade noch ein Gedanke zum Thema optimieren gekommen. Man sollte Eingaben prüfen, in VBA ist es ein leichtes -korrekte- Eingaben auszuwerten. Man sollte sich die taegliche Arbeit so weit wie möglich erleichtern, Tipp Fehler vermeiden!
Die Grund Eingabe als Zahl von 1-9 prüfen ist simpel. Ich kann auch 53 Abteilungen in Milli Sekunden prüfen, wenn du mir eine Spalte vorgibst wo alle Abteilungen -ohne Leerzeile- untereinander stehen. Was ist mit der VS-Nr.? - Ist die auch immer gleich, oder ein Teil davon? Man kann auch teile eines Wortes auf Korrektheit prüfen. Ich muss nur eine Vorlage (Spalte) zum Vergleichen haben.
Schau mal was da machbar und sinnvoll ist, ich aendere mal die Userform auf Textfeld für Grund um.
mfg Piet
AW: Optimierung per VBA Code
09.01.2019 18:49:44
Markus
Hallo nochmal,
kann ich den alten Datei-Link nutzen, oder muss du die neu hochladen wenn du Änderungen vorgenommen hast. In der Combobox die 3 Eingabefelder verlangen die immer eine Pflichteingabe, weil ab und zu kann es vorkommen das ich keine Vers.-Nr. habe.
Die Eingabefelder Grund (da hast du einen Schreibfehler in der Maske "Brund") und Abteilung sind immer vorhanden.
Eine Liste mit den Abteilungen ist kein Problem, aber was mache ich wenn sich an den Abteilungen was ändert, oder neue hinzukommen und alte eventuell eingestampft werden.
Bei den Vers.-Nr. haben wir 2 Arten die sich in der Formatierung unterscheiden. z.B.
0000.000.000.0 und
00.000.000.0
Hab ich schon über Formatierung versucht, ich kann nur die Formatierung 0000.000.000.0 wählen, aber dann zeigt er mir bei der 2. Vers.-Nr. 2 führende Nullen an. Könnte ich aber mit leben.
Heute morgen ist mir noch eine Idee gekommen. Wenn wir neue Sendungen in den Spalten A-J eintragen, hätte ich gerne, sobald ich in Spalte E (Vorname Name) etwas (egal welches Zeichen) eintrage, das in Spalte C (Versand Datum) das aktuelle Datum (TT.MM.JJ) erscheint.
Ich habe das heute schon in Spalte C mit einer Formel (=HEUTE()….) in Abhängigkeit von Spalte E ausprobiert, und auch geklappt, aber dann kam mir der Gedanke, wenn ich heute die Datei speichere und morgen früh die Datei wieder öffne dann aktualisiert Excel alle Datumseinträge in Spalte C von "gestern". Ich weis nicht ob das über VBA zu machen ist, das die alten Datumseinträge nicht aktualisiert werden.
Gruß Markus
AW: Optimierung per VBA Code
09.01.2019 21:11:38
Piet
Hallo Markus
bitte lade dir dieses neue Beispiel herunter, es dürfte die interessanteste Lösung zur Zeit sein.
Ich glaube es ist mir gelungen bei 9 und 11 stelligen Zahlen das Format per VBA hinzubekommen das du dir wünschst. Es klappt aber nur bei 9+11 stelligen Zahlen! - Wenn keine VS Nr vorliegt fragt die MsgBox jetzt ob du weitermachen willst? - Bei Ok heist das "Ja"! Dann macht das Makro ohne VS Nr weiter. Frage: kann die VS Nr auch Text sein? Wegen dem Format in Spalte U.
Die Prüfung für Abteiungen ist zur Zeit auf "No" gestellt, sie störte mich beim testen. Abteilungen kannst du in Spalte AB bis 500 Werte eintragen, mehr als genug. Es sollen nur keine Leerzeilen drin sein. Das Makro sucht selbst immer die letzte Zeile.
Wenn jetzt noch der Scanner im Dauerbetrieb funktioniert kommen wir langsam in die Zielgerade.
mfg Piet
https://www.herber.de/bbs/user/126625.xlsm
AW: Optimierung per VBA Code
09.01.2019 21:24:37
Markus
Hallo Piet,
zu deiner Frage
"VS-Nr. auch Text sein"
nein, wir haben nur diese 2 Zahlen-Formate
so, ich teste jetzt die Testdatei, und du mach jetzt mal Feierabend. Wie spät ist es bei euch. Werde mich morgen nach dem Testen melden.
Super, was alles möglich mit VBA möglich ist, kannst du mir noch Literatur empfehlen.
Gruß nach Ankara
AW: Optimierung per VBA Code
09.01.2019 21:38:14
Piet
Hallo Markus
hier ist es gerade 23:39 Ankara Zeit. - In Literatur kenne ich mich nicht gut aus, Sorry.
Überlege aber mal eine Datei für VBA Anfaenger zu entwickeln, sozusagen als VBA Grundkurs.
Ist aber keine 5 Minuten Sache, dafür brauche ich einige Zeit.
Jetzt mach ichn Schluss und schaue mir noch ein Video von Hans Süer Colonia Duett "das Ei" an.
Übrigens, hier liegt zur Zeit 15 Zentimeter Schnee, haengen überall am Balkon Eiszapfen.
Dann mal bis morgen ...
mfg Piet
AW: Optimierung per VBA Code
09.01.2019 22:09:58
Markus
Hallo Piet,
Achtung neue Datei
das ist ja super mit dem Datum und der fortlaufenden Nr. Aber es gibt ein Problem. Wenn ich in Y1 einen Rückläufer ein scanne und anschließend auf den Button klicke, kommt eine Fehlermeldung. (Laufzeitfehler) Ich habe nichts umgestellt vorher.
Anschließend habe ich noch die Abteilungen eingefügt und ein paar Formatierungen vorgenommen, das Tabellenblatt umbenannt und gespeichert.
https://www.herber.de/bbs/user/126627.xlsm
Gruß aus Münster und übrigens
1992-1994 war ich für 2 Jahre in Köln Rodenkirchen. War ne super Zeit. Sommertags draußen bei FRÜH (fast am Dom) gesessen.
AW: Optimierung per VBA Code
10.01.2019 11:39:11
Piet
Hallo Markus
schön das du in Rodenkirchen warst, du bin ich zur Schule gegangen. Das Boot "Alte Liebe1 und die "Kitzelbude" sollten dir bekannt sein. Zwei kleine Kneipen neben der Kapelle wo man so eng sitzt das man sie im Volksmund "Kitzelstüffje" nannte. Nur im Rhein schwimmen war sehr riskant!
Ich schaue mir die Datei an, mal sehen ob ich den Laufzdeitfehler entdecke. Bis dann ....
mfg Piet
AW: Optimierung per VBA Code
10.01.2019 11:55:29
Markus
Hallo Piet,
wieso liegt in Ankara Schnee, und bei uns im Münsterland nicht. Spaß bei Seite.
Ich hab das Tabellenblatt wieder in Tabelle1 umbenannt und nun ist auch der Laufzeitfehler wieder weg.
Gruß Markus
AW: Optimierung per VBA Code
10.01.2019 12:02:03
Piet
Hallo Markus
den Laufzeitfehler habe ich schnell gefunden nachdem ich deinen Text noch mal gelesen habe.
Du hast die Tabelle umbenannt, kein Problem. Dann muss in zwei Makros aber auch "Tabelle1" umbenannt werden in "Erfassung". Danach lief das Makro bei mir.
In Modul1 findet du die Zeile: - With Worksheets("Tabelle1") - bitte AENDERN, das gilt für das ganze Modul1!
Den Code für die UserForm, UserForm Code anklicken, Code habe ich geaendert und unten angehangen:
Wenn du die zwei Sachen korrigiert hast sollte der Code laufen. Ich bin gespannt was der Scanner macht?
mfg Piet
PS - zum VBA lernen. With Klammer mit End With verwenden wir um Range und Cells Bereiche auf ein bestimmtes Blatt zu beziehen.
Dafür muss vor Range oder Cells ein "." stehen, so: - .Range() - Wir erleichtern uns auf die Art die Programmierung, sonst müss man bei vielen Tabellen den Befehl so so schreiben. Variable = Worksheets("xyz").Range("xx").Value - s. unteren Code mit With!
'beim Öffnen Scanner Wert laden
Private Sub UserForm_Initialize()
With Worksheets("Erfassung")
'Scanner Barcode in TextBox4 laden
Label12 = "    Neustart":  Label11 = " - - -"
TextBox4 = .Range("Y1").Value
ComboBox1.RowSource = "AB2:AB" & .Range("AB1").End(xlDown).Row
ComboBox1.Visible = False   'ComboBox bei Start ausblenden
End With
End Sub

AW: Optimierung per VBA Code
10.01.2019 12:44:49
Markus
Mahlzeit nochmal,
hab ich wieder umbenannt in "Erfassung" und auch deine beiden Änderungen im VBA Editor vorgenommen. Abfrage läuft. "Laufzeitfehler weg"
Bei geöffneter ComboBox kann ich allerdings nicht den nächsten Rückläufer einlesen.
Die Abfragen für Abteilungen kannst du auch aktivieren.
Ansonsten läuft es hervorragend. Ich schick dir noch mal meine aktuelle Testdatei, und alles was im VBA Editor nicht mehr benötigt wird kannst du löschen.
https://www.herber.de/bbs/user/126640.xlsm
Danke Piet
AW: Optimierung per VBA Code
10.01.2019 16:44:13
Piet
Hallo Markus
ich sende dir noch mal zwei geaenderte Makro Codes. Da die UserForm leider nicht im Dauerbetrieb arbeitet schliesse ich sie jetzt nach der Eingabe. Dafür versuch ich sie bei der Scanner Eingabe automatisch zu öffnen. Ich weiss aber nicht ob das dann funktioniert?
Sollte das soweit klappen denke ich das keine Verbesserungen mehr möglich sind. Noch eine Frage:
Was ist mit der Formatierung bei VS-Nr Eingabe? Funktioniert die richtig mit "," Zeichen?
Vielieicht haben ja auch Kollegen in anderen Pastaemtern Interesse deine Datei zu übernehmen ...
Um dem Code im Original laufen zu lassen must du ihn nur in ein Modul und Tabelle Erfassung kopieren.
mfg Piet
'Target Makro bei Eingabe in Tabelle1:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then Exit Sub
If Target.Value = Empty Then Exit Sub  'Aussprung bei Zelle löschen
If Target.Column = 5 And Target.Value  Empty Then
Target.Offset(0, -2) = CDate(Left(Now, 10))
'Lauf-Nr +1 der vorherigen Zelle (erst ab Zeile 3!)
If Target.Row > 3 Then Target.Offset(0, -1) = Target.Offset(-1, -1) + 1
End If
'Bei Scanner Eingabe UserForm1 Öffnen
If Target.Address(0, 0) = "Y1" Then UserForm1.Show
End Sub

Option Explicit            '8.1.2019   Piet  für  Markus (Postdienst)
Const AbtPrüfen = "Ja"     'Ja/No zum Abteilung Prüfen aktivieren!!
Public VSOK As Boolean     'True/False für VS Nr. (keine Wiederholung)
'10.1.19  korrigiert
'Scanner Daten über UF2 suchen
'####   neues Programm   ####
Sub UF_Scanner_Daten_suchen()
Dim Wert As Variant, z As Long
Dim j As Integer, lz As Integer
Dim rFind As Range, Suchen As String
Dim UF As UserForm: Set UF = UserForm1
With Worksheets("Erfassung")   '** kann geaendert werden!!
If .Range("Y1").Value = "" Then
MsgBox "Es liegt kein Scanner Wert in Zelle 'Y1' vor - Abbruch!!": Exit Sub
End If
'fehlende VS-Nr und Abteilung püfen
If UF.TextBox1.Text = Empty Then
MsgBox "Grund fehlt":  Wert = "Err"
UF.Label12 = "Fehler - Grund fehlt"
End If
If VSOK = True Then  'keine Wiederholung
ElseIf UF.TextBox2.Text = Empty Then
Wert = MsgBox("VS-Nr fehlt - weitermachen?", vbOKCancel)
If Wert = vbOK Then VSOK = True: Wert = "" _
Else UF.Label12 = "Fehler - VS-Nr fehlt"
End If
If UF.TextBox3.Text = Empty Then
MsgBox "Abteilung fehlt":  Wert = "Err"
UF.Label12 = "Feh. - Abteilung fehlt"
End If
'Aussprung bei Fehler, egal welcher!!
If Wert = "Err" Or Wert  "" Then Exit Sub
'Eingabe Prüfung nur für Grund (1-9) + Abteilung (Spalte AB)
Wert = UF.TextBox1.Text
If Not IsNumeric(Wert) Then MsgBox "Für Grund ist nur Zahl 1-9 erlaubt, kein Text!": Exit  _
Sub
If Wert  9 Then MsgBox Wert & "  ungültige Zahl für Grund! - Nur 1-9 erlaubt!": _
Exit Sub
'Abteiung Prüfung: - Abteilungen in Spalte AB
'** kann durch "No" oben in Const abgeschaltet werden!
If AbtPrüfen = "Ja" Then
Wert = UF.TextBox3.Text
lz = .Cells(500, "AB").End(xlUp).Row
'Prüfung auf Abteilungen
For j = 2 To lz + 2
If .Cells(j, "AB") = Wert Then Exit For
Next j
If j > lz Then
MsgBox Wert & "  ungültige Abteiung - bitte prüfen"
UF.ComboBox1.Visible = True  'ComboBox aktivieren!
Exit Sub
End If
End If
'**********    Eingabe verarbeiten     **************
Suchen = .Range("Y1").Value   'Barcode laden
Set rFind = .Columns("K").Find(What:=Suchen, After:=Range("K1"), LookIn:= _
xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False)
If rFind Is Nothing Then MsgBox Suchen & "  Suchwert nicht gefunden - Abbruch!!": Exit Sub
If Not rFind Is Nothing Then
rFind.Select:  z = rFind.Row
'Weiter bearbeiten Abfrage:
.Cells(z, "T").Value = UF.TextBox1.Text  'Wert
.Cells(z, "U").Value = UF.TextBox2.Text  'VS-Nr
.Cells(z, "V").Value = UF.TextBox3.Text  'Abteiung
'VS-Nr nach Eingabe Laenge formatieren
If Len(UF.TextBox2.Text) = 11 Then
.Cells(z, "U").NumberFormat = "0000"",""000"",""000"",""0"
ElseIf Len(UF.TextBox2.Text) = 9 Then
.Cells(z, "U").NumberFormat = "00"",""000"",""000"",""0"
End If
'Datum und Tages-Anzahl als Wert setzen
.Cells(z, "W").Value = Left(Now, 10)
.Cells(z, "X").Value = CDate(Cells(z, "W")) - CDate(Cells(z, "C"))
'alten Scanner Barcode löschen, UserForm schliessen
.Range("Y1").Value = Empty
Unload UserForm1
VSOK = False        'VS-Nr  keine Wiederholung!
End If
End With
Range("Y1").Select   'Cursor auf "Y1" setzen
End Sub

AW: Optimierung per VBA Code
10.01.2019 19:28:39
Markus
Hallo Piet,
Das Boot, Alte Liebe gibt’s immer noch!
Damals hieß es schon, dass die bald schließen, war einmal drauf. URIG und GEMÜTLICH
Habe das im VBA-Editor geändert. Ich hoffe das ich alles richtiggemacht habe. Ich lade die Datei noch einmal hoch, dann kannst du noch einmal drüber herschauen.
Die VS-Nr. werden sauber übernommen, SUPER
Eventuell noch ändern:
Spalte W (Datum wird automatisch erzeugt) Format TT.MM.JJ
Zelle Y1 (Scannerfeld) ist nach Klick auf „Eingabe bearbeiten“ wieder aktiv und bereit für den nächsten Scan
Dazu fällt mir noch was ein, oder Idee.
Ich kann meinem Scanner so programmieren das ein „Enter (Return)“ hinten drangehangen wird. Im Grunde wie ein Zeilensprung nach unten. Wäre es möglich die Zelle Y1 so zu programmieren, das beim Scannen gleich das Fenster UserForm1 geöffnet wird, ohne das ich mit der Maus auf den Button „UF1 starten“ klicken muss.
Den Button „UF1 starten“ löschen
Noch eins, könnte im Fenster „UserForm1“ unter Abteilung sich ein Dropdown-Menü zum auswählen öffnen.
Kann ich das Tabellenblatt „Info“ löschen
Könntest du die Änderungen alle vornehmen und die Datei dann nochmal hochladen. Ich denke dann haben wir erstmal eine Endfassung und ich kann dann mal die ganze nächste Woche im Alltagsbetrieb ausgiebig testen. Ich hab jetzt schon wieder, nur für das Jahr 2019, einen Datenbestand von knapp 2000.
Datei Link
https://www.herber.de/bbs/user/126656.xlsm
Gruß nach Ankara (hab ihr immer noch Schnee)
AW: Optimierung per VBA Code
11.01.2019 18:23:18
Piet
Hallo Markus
deine Beispieldatei mit einigen interessanten Erweiterungen zurück. Da kannst du noch einiges testen!
Dir wird auffallen das ganz Oben drei Zeilen neu eingefügt wurden, eine spontane neue Idee von mir!
Sie dienen zur Eingabe für neue Barcodes, die nach der Eingabe immer unten angehangen werden. Zeile 3 ist eine Kopie damit du weist welchen Eintrag du zuletzt bearbeitet hast. Die Eingabe erfolgt so immer in der Zeile 2 (blaue Schrift), du brauchst nicht zum Blatt Ende zu springen!! Ich weiss nicht ob diese Idee für dich von Vorteil ist. Wenn ja würde es mich freuen.
Das Eingabe Makro habe ich um zwei Prüfungen erweitert. Vor der Einngabe prüfe ich jetzt ob in der RC Zelle bereits Werte vorliegen. Ein Schutz gegen versehentliches Überschreiben vorhandener Daten!
Die VS-Nr Prüfung habe ich geandert. Es wird nicht mehr geprüft ob eine VS-Nr. vorliegt, sondern nur ob die Zeichen Laenge von 9 oder 11 Zahlen stimmt. Wenn dir die andere Prüfung lieber ist kann ich sie wieder mit einbauen.
Das Eingabe Makro habe ich auf Dauerbetrieb für den Scanner ausgelegt, d.h., die UserForm wird gelöscht für weitere Eingaben. Dafür habe ich im Augenblick den Befahl zum Schliessen der UserForm am Makro Ende deaktiviert, weil du im Scanner noch einen Return einbauen wolltest. Vielleicht klappt es ja mit dem Return das wir die UserForm nicht mehr schliessen müssen! Waere vorteilhaft!
Wennn das nicht klappt kannst du die UserForm wieder automatisch schliessen, indem du vorm Befehl Unload das ' Zeichen löschst. Dieses Zeichen gilt für Excel als Kommentar = grüne Schrift. Mit dem Trick deaktivieren Programmiere Befehle zum testen, statt sie zu löschen!!
Mir faellt gerade ein das ich im Target Makro noch einen Fehler habe. Deshalb habe ich dir einen korrigierten Code mit angehangen. Bitte im neuen Beispiel auswechseln. Ich hatte die Datei schon hochgeladen als es mişr einfiel!
Neu ist auch ein Button für Suchlauf nach RC Code oder Namen + Adresse. Gibst du die ganze RC Nummer ein sucht er diese Nummer. Gibst du zwei Punkte mit Zahlen ein "..1284" dann sucht er die rechten Teil in allen Barcodes, und meldet die Zeile wo er fündig wurde. Dasselbe gilt für Namen oder Address suche. Die gefundene Zelle kannst du zum bearbeiten mit "Ja" anspringen oder mit "Nein" weitersuchen, z.B. beim Namen Schmitz, der ja öfers vorkommt.
Ja, nun hast du einiges zum testen, bitte lies noch die Info dazu. Kannst du danach löschen
Würde mich freuen wenn dir diese umfangreiche Arbeit in der Praxis echt weiterhilft.
Vielleicht komme ich dich mal in Münster besuchen wenn ich in Deutschland bin.
mfg Piet
https://www.herber.de/bbs/user/126676.xlsm
Option Explicit
Dim rFind As Range, j, lz As Long
'Target Makro bei Eingabe in Tabelle1:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then Exit Sub
If Target.Value = Empty Then Exit Sub  'Aussprung bei Zelle löschen
'Bei Scanner Eingabe UserForm1 automatisch starten
If Target.Address(0, 0) = "Y1" Then UserForm1.Show: Exit Sub
'dieses Makro gilt für Dauerbetrieb des Scanners!!
'**  dann das obere makro deaktivieren  (durch 'Zeichen vor IF)
If Target.Address(0, 0) = "Y1" And Target.Value  Empty Then
If UserForm1.Visible = True Then   'nur bei geöffneter UserForm!!
UserForm1.Label11 = UserForm1.TextBox4
UserForm1.Label12 = "neuer Barcode"
UserForm1.TextBox4 = Range("Y1").Value
End If
End If
'** neu eingefügt für Eingabe in Zeile2  (Kopie in Zeile3)
'Kopiert Zeile 2 ans Tabellen Ende und als Kopie in Zeile 3
If Target.Address(0, 0) = "S2" And Target.Font.ColorIndex = 5 Then
lz = Cells(Rows.Count, 1).End(xlUp).Row
'Prüfung ob Datensatz bereits vorhanden ist  (keine doppelten)
For j = 5 To lz + 1
If Cells(j, "K").Value = Range("K2").Value Then Exit For
Next j
If j  Empty Then
Target.Offset(0, -2) = CDate(Left(Now, 10))
'Lauf-Nr +1 der vorherigen Zelle (erst ab Zeile 3!)
If Target.Row > 3 Then Target.Offset(0, -1) = Target.Offset(-1, -1) + 1
End If
End Sub

AW: Optimierung per VBA Code
11.01.2019 21:17:39
Markus
Hallo Piet
Das mit dem Barcodegenerator ist gut gemeint, aber ich denke mein Weg ist der einfachere, da ich die Zelle O2 (ich fang mal oben an) einfach unten rechts an der Zelle runterziehen muss, und Excel zählt immer 1 dabei. In den Spalten P Q R S wird die Prüfziffer berechnet und in P2 dargestellt (ROT). Anschließen werden die Zellen O2 + P2 in K2 verknüpft und dargestellt und ich habe meinen endgültigen 11stelligen Code (K2 ist morgens rosa eingefärbt, weil Zelle L2 noch leer ist). In Zelle L2 kommen nach Feierabend die Codes von der Frankiermaschine (werden per CSV-Datei eingefügt).Dann werden die Zellen K2 und L2 verglichen (um die Sicherheit der Reihenfolge zu gewährleisten), sind sie identisch färbt sich K2 grün ein, und ich bin auf der sicheren Seite.
Beispiel:
R C 4 4 0 6 0 1 0 8
R C 4 4 0 6 0 1 0 9
Die Prüfziffer (Rot) wird in den Spalten P Q R S nach folgenden Formeln berechnet
P =WENN($S2=11;5;WENN($S2=10;0;$S2))
Q =SUMMENPRODUKT((TEIL($O2;{3;4;5;6;7;8;9;10};1))*{8;6;4;2;3;5;9;7})
R =$Q2-(ABRUNDEN(($Q2/11);0)*11)
S =WENN($Q2=0;"";11-$R2)
Berechnung anhand der Barcode-Nr. RC44060108 (Zelle O2) wird die Prüfziffer wie folgt berechnet.
Codestellen 1-10 + 1 Codestelle Prüfziffer
Stellen 1 2 3 4 5 6 7 8 9 10 11
Code R C 4 4 0 6 0 1 0 8
Stellen 3-10 werden multipliziert mit Faktor
8 6 4 2 3 5 9 7
Ergebnis 32 24 0 12 0 5 0 56
Summe aller Multiplikationen 32+24+0+12+0+5+0+56=114
Division 114:11 (11 ist immer feste Größe) = 11, Rest 3
Subtraktion: 11 (Feste Größe) − 3 (Rest) = 8
Faktor 11 ist festgelegt und davon wird der Rest abgezogen.
Dieses Ergebnis bestimmt die Prüfziffer nach dem System unten.
In diesem Fall wäre 8 die Prüfziffer.
Nach folgendem System ermittelt sich die Prüfziffer
Subtraktionsergebnis: 1 – 9 = Prüfziffer ist gleich Ergebnis
10 = Prüfziffer 0
11 = Prüfziffer 5
Ist schon ein irrer Weg.
Jetzt habe ich noch eine Frage zu den beiden (oder 3) Codes, wo genau muss ich die im VBA Editor einfügen.
Schönes Wochenende und hast du eigentlich Familie
Gruß Markus
AW: Optimierung per VBA Code
11.01.2019 23:34:30
Piet
Hallo Markus
ja und Nein zu Familie, keine Frau, aber erwachsene Kinder. Nennt man: - aneinander vorbeileben!
Den Code aus dem Beispiel in Modul1 kannst du in dein Modul1 kopieren. Der unten nachgereichten Code ist für die UserForm, gehört also direkt ins Blatt der UserForm. Im VBA Editor UserForm und dann UserForm "View Code" anklicken! - (rechte Maustste)
Er wurde gekürzt weil wir einiges Nicht brauchen. Nach Eingabe von Grund springt der Cursor jetzt automatisch auf die VS-Nr.
Die ComboBox bleibt jetzt immer sichtbar, kann also jederzeit jederzeit benutzt werden.
Wenn mein Vorschlag für Eingabe Oben Nicht vorteilhaft ist dann kannst du den Teil im Target Makro löschen der so markiert ist:
'************************************* - lösche den ganzen Beeich zwischen Oben und unten! - In Tabelle "Erfassung"!
Wenn du nach einer Barcode Eingabe die UserForm automatisch schliessen willst must du im Modul1 diesen Codeteil wieder aktivieren. ER steht ganz am Ende des Codes (zur Zeit in grün!!): - 'Unload UserForm1
Lösche bitte das ' Zeichen vor Unload, dann ist dieser Befehl wieder aktiv. Er schliest die Userform nach der Eingabe automatisch!
Dein Thread ist bald zu Ende, ich denke du hast gelesen was in der Info stand.
Dann viel Spass beim Testen und ich wünsche dir vollen Erfolg. Toi, toi, toi ...
mfg Piet
Private Sub ComboBox1_Change()
TextBox3.Text = ComboBox1.Text
End Sub
'Button:  Schliessen
Private Sub CommandButton2_Click()
Unload Me
End Sub
'Button:  Eingabe bearbeiten
Private Sub CommandButton1_Click()
Call UF_Scanner_Daten_suchen     'Code in Modul2
End Sub
Private Sub TextBox1_Change()
If TextBox1.Value  Empty Then
If TextBox1.Value > 0 And TextBox1.Value 

AW: Optimierung per VBA Code
11.01.2019 23:34:30
Piet
Hallo Markus
ja und Nein zu Familie, keine Frau, aber erwachsene Kinder. Nennt man: - aneinander vorbeileben!
Den Code aus dem Beispiel in Modul1 kannst du in dein Modul1 kopieren. Der unten nachgereichten Code ist für die UserForm, gehört also direkt ins Blatt der UserForm. Im VBA Editor UserForm und dann UserForm "View Code" anklicken! - (rechte Maustste)
Er wurde gekürzt weil wir einiges Nicht brauchen. Nach Eingabe von Grund springt der Cursor jetzt automatisch auf die VS-Nr.
Die ComboBox bleibt jetzt immer sichtbar, kann also jederzeit jederzeit benutzt werden.
Wenn mein Vorschlag für Eingabe Oben Nicht vorteilhaft ist dann kannst du den Teil im Target Makro löschen der so markiert ist:
'************************************* - lösche den ganzen Beeich zwischen Oben und unten! - In Tabelle "Erfassung"!
Wenn du nach einer Barcode Eingabe die UserForm automatisch schliessen willst must du im Modul1 diesen Codeteil wieder aktivieren. ER steht ganz am Ende des Codes (zur Zeit in grün!!): - 'Unload UserForm1
Lösche bitte das ' Zeichen vor Unload, dann ist dieser Befehl wieder aktiv. Er schliest die Userform nach der Eingabe automatisch!
Dein Thread ist bald zu Ende, ich denke du hast gelesen was in der Info stand.
Dann viel Spass beim Testen und ich wünsche dir vollen Erfolg. Toi, toi, toi ...
mfg Piet
Private Sub ComboBox1_Change()
TextBox3.Text = ComboBox1.Text
End Sub
'Button:  Schliessen
Private Sub CommandButton2_Click()
Unload Me
End Sub
'Button:  Eingabe bearbeiten
Private Sub CommandButton1_Click()
Call UF_Scanner_Daten_suchen     'Code in Modul2
End Sub
Private Sub TextBox1_Change()
If TextBox1.Value  Empty Then
If TextBox1.Value > 0 And TextBox1.Value 

AW: Optimierung per VBA Code
11.01.2019 23:34:31
Piet
Hallo Markus
ja und Nein zu Familie, keine Frau, aber erwachsene Kinder. Nennt man: - aneinander vorbeileben!
Den Code aus dem Beispiel in Modul1 kannst du in dein Modul1 kopieren. Der unten nachgereichten Code ist für die UserForm, gehört also direkt ins Blatt der UserForm. Im VBA Editor UserForm und dann UserForm "View Code" anklicken! - (rechte Maustste)
Er wurde gekürzt weil wir einiges Nicht brauchen. Nach Eingabe von Grund springt der Cursor jetzt automatisch auf die VS-Nr.
Die ComboBox bleibt jetzt immer sichtbar, kann also jederzeit jederzeit benutzt werden.
Wenn mein Vorschlag für Eingabe Oben Nicht vorteilhaft ist dann kannst du den Teil im Target Makro löschen der so markiert ist:
'************************************* - lösche den ganzen Beeich zwischen Oben und unten! - In Tabelle "Erfassung"!
Wenn du nach einer Barcode Eingabe die UserForm automatisch schliessen willst must du im Modul1 diesen Codeteil wieder aktivieren. ER steht ganz am Ende des Codes (zur Zeit in grün!!): - 'Unload UserForm1
Lösche bitte das ' Zeichen vor Unload, dann ist dieser Befehl wieder aktiv. Er schliest die Userform nach der Eingabe automatisch!
Dein Thread ist bald zu Ende, ich denke du hast gelesen was in der Info stand.
Dann viel Spass beim Testen und ich wünsche dir vollen Erfolg. Toi, toi, toi ...
mfg Piet
Private Sub ComboBox1_Change()
TextBox3.Text = ComboBox1.Text
End Sub
'Button:  Schliessen
Private Sub CommandButton2_Click()
Unload Me
End Sub
'Button:  Eingabe bearbeiten
Private Sub CommandButton1_Click()
Call UF_Scanner_Daten_suchen     'Code in Modul2
End Sub
Private Sub TextBox1_Change()
If TextBox1.Value  Empty Then
If TextBox1.Value > 0 And TextBox1.Value 

AW: Optimierung per VBA Code
11.01.2019 23:34:34
Piet
Hallo Markus
ja und Nein zu Familie, keine Frau, aber erwachsene Kinder. Nennt man: - aneinander vorbeileben!
Den Code aus dem Beispiel in Modul1 kannst du in dein Modul1 kopieren. Der unten nachgereichten Code ist für die UserForm, gehört also direkt ins Blatt der UserForm. Im VBA Editor UserForm und dann UserForm "View Code" anklicken! - (rechte Maustste)
Er wurde gekürzt weil wir einiges Nicht brauchen. Nach Eingabe von Grund springt der Cursor jetzt automatisch auf die VS-Nr.
Die ComboBox bleibt jetzt immer sichtbar, kann also jederzeit jederzeit benutzt werden.
Wenn mein Vorschlag für Eingabe Oben Nicht vorteilhaft ist dann kannst du den Teil im Target Makro löschen der so markiert ist:
'************************************* - lösche den ganzen Beeich zwischen Oben und unten! - In Tabelle "Erfassung"!
Wenn du nach einer Barcode Eingabe die UserForm automatisch schliessen willst must du im Modul1 diesen Codeteil wieder aktivieren. ER steht ganz am Ende des Codes (zur Zeit in grün!!): - 'Unload UserForm1
Lösche bitte das ' Zeichen vor Unload, dann ist dieser Befehl wieder aktiv. Er schliest die Userform nach der Eingabe automatisch!
Dein Thread ist bald zu Ende, ich denke du hast gelesen was in der Info stand.
Dann viel Spass beim Testen und ich wünsche dir vollen Erfolg. Toi, toi, toi ...
mfg Piet
Private Sub ComboBox1_Change()
TextBox3.Text = ComboBox1.Text
End Sub
'Button:  Schliessen
Private Sub CommandButton2_Click()
Unload Me
End Sub
'Button:  Eingabe bearbeiten
Private Sub CommandButton1_Click()
Call UF_Scanner_Daten_suchen     'Code in Modul2
End Sub
Private Sub TextBox1_Change()
If TextBox1.Value  Empty Then
If TextBox1.Value > 0 And TextBox1.Value 

AW: Optimierung per VBA Code
12.01.2019 15:39:17
Markus
Hallo Piet,
im letzten Post ist mir ein Rechenfehler unterlaufen
alt Division 114:11 (11 ist immer feste Größe) = 11, Rest 3
neu Division 114:11 (11 ist immer feste Größe) = 10, Rest 4
alt Subtraktion: 11 (Feste Größe) − 3 (Rest) = 8
neu Subtraktion: 11 (Feste Größe) − 4 (Rest) = 7
Faktor 11 ist festgelegt und davon wird der Rest abgezogen.
Dieses Ergebnis bestimmt die Prüfziffer nach dem System unten.
alt In diesem Fall wäre 8 die Prüfziffer.
neu In diesem Fall wäre 7 die Prüfziffer.

Nach folgendem System ermittelt sich die Prüfziffer
Subtraktionsergebnis: 1 – 9 = Prüfziffer ist gleich Ergebnis
10 = Prüfziffer 0
11 = Prüfziffer 5
Ich wollte dir das nur Richtigkeitshalber mitteilen.
Gruß aus NRW nach Ankara
AW: Fehlsendung - vier mal, Sorry
11.01.2019 23:38:05
Piet
Hallo an Herber
Upps, wie ist das denn passiert? Hatte mein PC da Husten? Sorry, war keine Absicht!
mfg Piet
AW: Fehlsendung - vier mal, Sorry
12.01.2019 17:49:05
Piet
Hallo Markus
danke für die Mitteilung, bald ist der Thread zu Ende. Wenn es noch Fragen gibt evtl. einen neuen aufmachen.
Ansonsten viel Erfolg mit unserer gemeinsamen Arbeit ....
mfg Piet
Optimierung per VBA Code
12.01.2019 17:59:13
Markus
Hey Piet,
Sorry ich kriegst nicht hin, mit dem einfügen der gestrigen neuen Code's. Irgendwie bin ich überfordert und kann dir nicht mehr folgen. Könntest du die vielleicht einfügen und mir dann die geänderte Datei per Link schicken. Dann gebe ich auch für's Erste Ruhe. Das mit dem neuen Thread ist eine gute Idee. Vielleicht unter Fortsetzung Optimierung per VBA Code.
Gruß Markus
AW: Optimierung per VBA Code
12.01.2019 23:35:47
Piet
Hallo Markus
hier noch mal die letzte geanderte Version. Du kannst die Beispieldatei auch aus dem Archiv laden.
Sonst noch mal einen neuen Thread aufmachen. Viel Erfolg beim Testen.
mfg Piet
https://www.herber.de/bbs/user/126702.xlsm

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige