ich hoffe Du schaust hier noch rein. Jetzt hat es ja doch etwas gedauert, bis ich meine Zusage umgesetzt habe.
Dafür bekommst Du aber eine Out-of-the-box-Lösung, weil ich die Gelegenheit, die Suchseite genau unter die Lupe zu nehmen einerseits für eigene Zwecke genutzt habe und weil ich andererseits dabei Fallstricke umgehen musste, für die Du vermutlich noch viel hättest nachfragen müssen.
Zusätzlich wollte ich dieses Projekt auch nutzen, um mal alles neu und zusammenhängend aufzuschreiben, was ich über Web Scraping mit VBA inzwischen weiß. Das habe ich nach 14 Seiten abgebrochen und werde das als eigenes Projekt in anderer Form weiterverfolgen. Mir war nicht klar, was ich dazu alles weiß und welche Ausflüge ich machen muss, um Ausführungen auch meinen Ansprüchen genügend verstehbar im Zusammenhang mit VBA ansich zu formulieren.
Für den Gesamt-Zusammenhang, Deine beiden Anfragen vom 27.01.2019 und 05.02.2019
https://www.herber.de/cgi-bin/callthread.pl?index=1671296
https://www.herber.de/cgi-bin/callthread.pl?index=1673468
Ein paar Erklärungen zur Lösung
Wie man auf bestimmte Inhalte einer Seite zugreift, habe ich wie gesagt jetzt nicht mit aufgenommen und schreibe dazu jetzt auch nichts weiter. Im Quellcode sind alle HTML Ausschnitte als Kommentare hinterlegt. In den einzelnen Funktionen kannst Du nachvollziehen, wie ich drangekommen bin und sie weiter verarbeitet habe.
Statt mich also zum Programmieren auszulassen, möchte ich einige Worte zu den Tabellen EANs und Ausgelesen schreiben. Deine beiden Tabellen sind auch noch enthalten und auch Dein VBA Modul habe ich drin gelassen. So hast Du den direkten Vergleich zwischen einer quick and dirty Lösung, mit der man sehr schnell an Daten kommen kann, wenn es nur ein- zweimal benötigt wird und einer Lösung, die ausgearbeitet alles so fein filetiert holt, dass Du direkt mit den Daten arbeiten kannst. Projekte in dieser Form arbeite ich eigentlich nur für interne Zwecke aus. Aber da sich unser Interesse hier überschneidet und Deine Anfrage Ausgangspunkt für meine Überlegungen dazu war, stelle ich Dir (fast) die Lösung zur Verfügung, die Du erstellen wolltest.
Die Tabelle EANs
Dies ist die Arbeitstabelle, wenn man so will. In der ersten Spalte trägst Du die EANs ein, die Du auslesen möchtest. Wenn Du das machst, wird jede zweite Zeile automatisch grau eingefärbt. Das passiert über das Worksheet_Change-Event, dessen Quellcode im Codemodul der Tabelle selbst abgelegt ist. Das Event wird nur bei Änderungen in der ersten Spalte ausgelöst.
EAN-Tabellen-Mechanik
In der Kopfzelle der ersten Spalte findest Du den Button 'EAN auf Ebay Suchseiten'. Bevor Du diesen anklickst, musst Du die EANs in einem Block selektieren, die Du auslesen möchtest. Ist nur eine Zelle markiert, wird nur diese EAN ausgelesen. Das ist erstmal gewöhnungsbedürftig, hat aber den Vorteil, dass man das Auslesen sehr gezielt steuern kann. Z.B. wenn noch eine EAN dazu kommt, fügst Du sie einfach der ersten Spalte hinzu und liest nur diese aus.
Zu Beginn des Auslesens springt die Tabelle auf die erste selektierte Zeile und ab Zeile 13 wird bei jeder EAN um eine Zeile nach unten gescrollt. Nach der letzten ausgelesenen EAN springt die Tabelle wieder auf die erste ausgelesene EAN zurück. Auf diese Weise hast Du während des Makrolaufs jederzeit den Fortschritt im Blick, ohne Dich um etwas kümmern zu müssen.
EAN-Tabellen-Datenbereiche
So, wie die automatische Färbung jeder zweiten Zeile dem Führen des Auges dient, habe ich auch Rahmenlinien eingezogen und die Gitternetzlinien der Tabelle selbst ausgeblendet. Weil ich ein fauler Mensch bin, habe ich die Rahmenlinien manuell eingefügt. Deshalb reichen sie die geamten über eine Million möglichen Zeilen nach unten. Löschst Du Zeilen, bleiben die Linien trotzdem bis unten bestehen. Die Linien selbst haben keinen Einfluss auf das echte Ende der Datentabelle.
Die Rahmenlinien teilen die Spalten in vier Bereiche. Der erste ist die erste Spalte. Die haben wir uns schon angeschaut. Der vierte Bereich ist einfach ein Zeitstempel, bestehend aus den Spalten für das Datum und die Uhrzeit. Ich finde diese Information sehr nützlich, wenn man in die Verlegenheit kommt, mal in älteren Tabellen etwas nachzusehen.
Der zweite und dritte Daten-Bereich sind verwand und deshalb auch nur durch eine gestrichelte Linie getrennt. Ich glaube hier löst sich auch Deine Annahme auf, dass die Suchergebnisse nicht immer chronologisch sind. Wenn es zu einem Suchterm auf Ebay nicht viele Suchergebnisse gibt, kommt es öfter vor, dass auch Treffer von internationalen Anbietern angezeigt werden. Diese befinden sich generell unter den deutschen Suchtreffern. Also ist es meistens so, dass das erste Datum eines internationalen Treffers vor den letzten deutschen Treffern liegt. Deshalb unterschiede ich zwischen diesen beiden Gruppen.
Da nur die erste Suchseite ausgelesen wird, werden maximal so viele Suchtreffer ausgelesen, wie auf der Ebay-Seite im Internet Explorer eingestellt sind. Die Grundeinstellung sind 50 Treffer pro Seite. Es kann auch für die deutschen Treffer vorkommen, dass z.B. 47 Treffer gefunden wurden, aber in der Spalte der wirklich ausgelesenen nur 42 steht. Ich habe das manuell geprüft und es stimmt. In solchen Fällen werden mehr Treffer ausgewiesen, als wirklich aufgelistet sind.
Für Internationale Treffer ist das der Standard. Es werden meistens mehr Treffer angezeigt, als wirklich ausgelesen werden. Du kannst dieser Tabelle auch entnehmen, wenn zu einer EAN nur internationale oder gar keine Treffer vorlagen.
Die Tabelle Ausgelesen
In dieser Tabelle landen alle ausgelesenen Werte, die EANs und auch Zeitstempel. Nun wolltest Du nur sechs Felder und stellst bei einem Blick in die Tabelle fest, dass die Tabelle 14 Spalten hat. Ok, in der ersten landen die EANs, damit die Suchtreffer zugeordnet werden können und damit das Farbschema richtig arbeiten kann. In den letzten beiden Spalten landen wieder die Zeitstempel.
Bleiben trotzdem elf Spalten für ausgelesene Daten, statt Deiner avisierten sechs. Zwar weiß ich nicht, was Du mit den Daten machen willst und wie Du sie verarbeitest, habe neben den drei genannten aber trotzdem noch fünf Werte aufgenommen, die ich für sinnvoll halte. Zur Erklärung hole ich etwas aus.
Unterscheidung der ausgelesenen Werte durch Einfärbung
Auch diese Tabelle wird mit einer Zeileneinfärbung versehen. Die ist allerdings etwas komplexer, als die der EAN-Tabelle. Dies ist der Grund, warum ich weiter vorne schrieb, dass es nur fast die Lösung ist, die Du erstellen wolltest. In der Tabelle Ausgelesen werden alle Zeilen direkt untereinander geschrieben, während Du Einzeltabellen vorgesehen hattest. Ich bilde diese Einzeltabellen durch Farbgebung und einer abschließenden Doppellinie unter jeder ausgelesenen EAN ab.
Jede ausgelesene EAN wird abwechseld mit einem Farbset versehen. Meine Kollegen lachen sich aufgrund meiner äußerst kreativen Farbgebungen immer halb tot. Du kannst Dir also gerne eigene Farben raussuchen ;-) Auf meinen Monitoren funktionieren die von mir gewählten jedenfalls für die Unterscheidungen, die ich herausstellen will.
Die grundlegenden Farbsets für wechselnde EAN sind Grün-/ Blautöne und Rosa-/ Orangetöne. Innerhalb dieser Sets gibt es helle und dunkle Farbtöne. In den hellen Tönen werden deutsche Suchtreffer ausgewiesen, in den dunkleren die internationalen. Innerhalb der eingefärbten Zeilen wechseln sich zusätzlich Farbtöne ab, um wieder Datengruppen zu bilden. Es gibt auch wieder eine manuelle Rahmengebung.
Jede zweite Zeile bleibt weiß, um die Augen nicht ganz zu killen ;-) Eine Ausnahme bildet die erste Spalte. In dieser werden wirklich alle Zellen eingefärbt. Der Grund ist, dass eine EAN auch nur einen einzigen Treffer liefern kann. Der wird zwar durch Doppellrahmenlinien eingegrenzt, aber man übersieht diese Treffer trotzem leicht, wenn es die weiße Zeile ist. Es fällt jedoch sofort auf, wenn zwischen lauter blauen oder grünen Zellen plötzlich eine rosa oder orangene auftaucht oder umgekehrt.
Die Einfärbung dieser Tabelle findet nur einmal ganz am Ende des Makrolaufs statt. Ansonsten bremst dieser Vorgang das Makro aus, weil ständig alle Zeilen neu eingefärbt würden. Außerhalb des Makros reagiert das Change-Event dieser Tabelle auch nur auf Änderungen in der ersten Spalte.
Die Datengruppen in der Tabelle Ausgelesen
Die erste Spalte mit den EANs und die letzten beiden mit den Zeitstempeln sind klar.
Start des Angebots
In der zweiten Spalte lege ich den Zeitstempel für den Angebotsstart ab. Den gibt es in Deinen Tabellen nicht (1 von 5 ;-) Der Zeitstempel liegt leider nur als Text vor, weil die Jahreszahl nicht mitgeliefert wird. Im HTML-Quelltext wird ausserdem vom Angebotsende gesprochen. Es ist aber der Einstellzeitpunkt. Ich habe das mit BayWotch geprüft.
Man könnte die Jahreszahl ermitteln. Dazu muss man aber chronologisch alle relevanten Daten durchgehen. Es gibt nämlich Angebote, die laufen bereits seit mehr als zwei Jahren. Dann hat man im letzten Datum z.B. einen Dezember, in dem davor einen April und im ersten einen Februar. Man könnte nun nur fiktive Jahreszahlen zuordnen, indem man von oben nach unten durchgeht, auf Jahreswechsel prüft und dann einfach abwärts zählt.
Dabei können aber natürlich falsche Jahreszahlen rauskommen, weil ein Angebot z.B. nicht erst 2 sondern schon 3 Jahre läuft. Die Jahreszahlen sind für dieses Makro allerdings nicht relevant. Die Datensätze pro EAN werden immer chronologisch von neu nach alt eingelesen. Also habe ich mir die Zeitstempelanalyse an dieser Stelle gespart.
Artikelbezeichnung und Artikelnummer
Die Artikelbezeichnung hast Du auch. Ich habe zusätzlich die Artikelnummer aufgenommen (2 von 5) Die Artikelnummer ist in der Tabelle als Link direkt auf die Angebotsseite auf ebay.de hinterlegt.
Anbietername, Shop-Name
Der Shop-Name kommt bei Dir nicht vor (3 von 5). Ich habe ihn der Vollständigkeit halber mit aufgenommen. Der Shop-Name kann auch Großbuchstaben enthalten, was in Ebay-Nicknames nicht geht. Der Shop-Name lautet in vielen Fällen auch anders, als der Nickname. Man kann über die Namensgebung teilweise Querverbindungen zwischen Accounts herstellen. Das ist dann eher mein Interesse. Nicht jeder Anbieter hat auch einen Shop, aber Anbieter mit Shop sind in den meisten Fällen gewerblich. Es gibt natürlich auch gewerbliche Anbieter ohne Shop.
Der Anbietername ist auf den Suchseiten ein Sonderfall muss ich sagen. Ist er zu lang, wir er nicht ganz ausgeschrieben, sondern abgebrochen und durch drei Punkte ergänzt, die anzeigen, dass da eigentlich mehr steht. Da unvollständige Daten ein echtes Ärgernis sind, habe ich für diesen Sonderfall einen Sonderfall im Makro integriert ;-)
Ist ein Anbietername mit drei Punkten abgeschlossen, ruft das Makro die zugehörige Angebotsseite über die Artikelnummer auf und liest den vollständigen Nickname dort aus. Weil die Angebotsseiten auf Ebay manchmal recht behäbig im Vergleich zum Rest sind, hat das zur Folge, dass man auf der EAN-Tabelle ein Stocken des Auslesens wahrnimmt, wenn ein Anbietername über den Extra Seitenaufruf geholt wird. Einfach laufen lassen und sich im Hinterkopf denken, später manuell würde es noch viel viel länger dauern.
An diesen beiden Spalten siehst Du übrigens, wenn die benötigten manuellen Voreinstellungen auf der Ebay-Seite im Internet Explorer nicht vorgenommen wurden. Dann bleibt die Spalte für Shop-Namen koplett leer und für Nicknames wird immer 'nicht gefunden' eingetragen. Alle anderen Daten werden aber geholt.
Dazu noch folgendes:
Ich habe das Makro auf drei verschiedenen Rechnern ausprobiert. Auf meinem Notebook mit Windows 7 und Excel 2016 werden die Namen immer nur für die erste EAN geholt. Danach muss man die Voreinstellungen im IE zurücksetzen und neu setzen. Super nervig das! Ich habe nicht rausgefunden, warum das so ist. Auf dem Rechner meiner Freundin, Windows 7, Excel 2010 läuft es hingegen völlig problemlos, genau wie gewünscht. Auf meinem Desktop PC, mit Windows 10 und Excel 2016 läuft es auch wie es soll.
In Deiner Vorlage hattest Du vor jede Zeile geschrieben, Anbieter 1, Anbieter 2, usw. Dieses Schema funktioniert nicht. Es ist durchaus normal, dass ein Anbieter mehrere Angebote laufen hat. Das kannst Du bereits bei den Suchtreffern Deiner Beispiel EAN sehen.
Willst Du etwas auf die Anbieternamen ausrechnen, folgender Tipp:
Tausche in allen Ebay-Nicknames die Sternchen * durch einen deutschen Umlaut aus. Ich nehme immer das große Ö. Umlaute gibt es in Ebay-Nicknames nicht. Das Sternchen ist aber in Ebay ein Jokerzeichen. Du rechnest bei Namen mit Sternchen also immer mit dem Risiko Werte aus mehreren Nicknames zu vermischen. Da kommt dann nur Grütze bei raus.
Einfach die Spalte mit den Nicknames markieren und den Ersetzen Dialog aufrufen. In das Suchfeld gibst Du ~* ein. Das Tilde-Zeichen vor dem Sternchen sorgt dafür, dass Excel das Sternchen nicht als Joker, sondern als Zeichen behandelt. Ohne das Tilde-Zeichen würdest Du alles in der Spalte erstzen. In das Ersetzenfeld gibst Du dann den Umlaut ein und klickst auf 'Alle erstezen'. Für den Rücktausch musst Du das Tilde-Zeichen im Ersetzenfeld dann weglassen.
Zustand
Dazu gibts eigentlich nix weiter zu sagen. Das dieses Makro nur neue Gegenstände auslesen soll war Dein Wunsch. Gesteuert wird das über einen Parameter, der mit der URL beim Seitenaufruf übergeben wird. Über diese Parameter werden auch die Sortierreihenfolge und nur Sofortkauf übergeben. Genauere Erklärungen dazu findest Du ganz am Anfang des Makros als Kommentare hinterlegt.
International
Das ist Spalte 4 von 5, die ich zugefügt habe. Wenn es internationale Suchtreffer gibt, werden in dieser Spalte die Länder eingetragen. Wie Du schnell feststellen wirst, steht da mitunter auch einfach nur mal 'ja' drin, statt ein Ländername. Nach meiner Beobachtung handelt es sich bei solchen internationalen Treffern um deutsche Anbieter, die international anbieten. Teilweise in anderen Währungen, aber eigentlich immer mit Lieferung ins Ausland.
Ich habe mich trotzdem für 'ja' entschieden, weil ich Deutschland verwirrnder fände und sich dieser Ländername halt auch nicht auslesen lässt.
Die Spalte International ist für die Farbgebung entscheidend. Über einen Eintrag wird nämlich der Farbwechsel von hell auf dunkel festgestellt und durchgeführt.
Artikelpreis, Versand, Stückpreis, PV
Der Artikelpreis ist klar. Die Versandkosten eigentlich auch. Hier kann es vorkommen, dass kostenloser Versand ausgelesen wird. In dem Fall wird 0,00 eingetragen, damit die Stückpreisberechnung eine Spalte weiter ohne extra Prüfung durchgeführt werden kann.
Die zusätzliche Spalte PV ist Spalte 5 von 5, die ich eingefügt habe. PV steht für Preisvorschlag und ist wichtig, falls Du mit den Preisen rechnen musst. Du findest bei vielen Suchtreffern den Hinweis 'oder Preisvorschlag'. Das bedeutet, der Preis kann niedriger ausfallen, weil der Anbieter mit sich handeln lässt. Bei Angeboten mit möglichem Preisvorschlag wird auch in dieser Spalte ein 'ja' eingetragen.
Schlussbetrachtung
Das wars im Großen und Ganzen. Ich hoffe Du kannst damit gut arbeiten. Ich habe das Ganze zum Abschluss noch einmal mit 470 EANs die 5.000 ausgelesene Zeilen ergaben durchlaufen lassen und es hat reibungslos funktioniert. Du möchtest ja immer maximal 30 EANs abarbeiten, was dann gut gehen sollte. Achja, wenn Du das Makro noch einmal starten solltest, werden die dann ausgelesenen Werte hinten in der Ausgelesen-Tabelle angefügt. Es wird nix gelöscht und es findet auch keine Prüfung auf doppelte statt.
Es kann sein, dass Du EANs aus Kategorien ausliest, die noch andere Informationen in den Suchtreffern enthalten, die ich mit meinem Code nicht automatisch umgehe. Eigentlich wollte ich noch eine Spalte 'Bemerkungen' einbauen, in der sonstige Infos versammelt werden. Das habe ich aber sein gelassen. Weitere Infos sind Sachen wie 'Lieferung an Abholstation möglich', 'X% Rabatt', 'Nur noch X Artikel vorhanden', usw. Wie gesagt, was da sonst noch auftauchen kann weiß ich nicht im Detail.
Zur Kurzinformation hat jede Kopfzelle in beiden Tabellen einen Kommentar. Die Ausgelesen-Tabelle ist ausserdem in der Breite so eingestellt, dass die Spalten genau auf einen FullHD Bildschirm passen.
Wenn Du Fragen zur Programmierung hast, auf die ich hier ja nicht eingegangen bin, frag einfach nach. Ich weiß ja nicht, ob Dich das Thema allgemein interessiert oder Du in Zukunft noch mehr damit zu tun haben wirst.
Hier ist der Link zum Download der Datei:
https://www.herber.de/bbs/user/127992.xlsm
Viele Grüße,
Zwenn