Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1956to1960
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

@ Piet, Makro, das Links von Internetseiten auflistet

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: @ Piet, Makro, das Links von Internetseiten auflistet
29.12.2023 13:20:48
ralf_b
Ich bn zwar nicht Piet aber so schwer scheint das ja nicht zu sein, falls ich hier nicht irgendwas übersehe.
For Each objLink In objLinks

lngCount = lngCount + 1
lshTab2.Cells(lngCount, 2) = objLink.href
lshTab2.Cells(lngCount, 3) = "'" & objLink.outertext
Next


d.h. lshTab2.Cells(lngCount, 2) bedeutet Zelle(Zeile, Spalte)
wenn du in Spalten schreiben willst , tauscht du einfach Zeile mit Spalte und erhöhst bei jeden durchlauf um 2 statt um 1.

For Each objLink In objLinks

if lngCount=0 then lngCount =2
lshTab2.Cells(1, lngCount) = objLink.href
lshTab2.Cells(2, lngCount,) = "'" & objLink.outertext
lngCount = lngCount + 2
Next
Anzeige
AW: @ Piet, Makro, das Links von Internetseiten auflistet
29.12.2023 19:49:24
Zwenn
Hallo zusammen,

ich nehme an, was gesucht ist, ist das hier:
(Ich habe den Code etwas entschlackt und die Variablen mit sprechenden Namen versehen.)


Sub LinksFromPages()
Dim linksAll As Object
Dim linkOne As Object
Dim linkRow As Long
Dim dataRow As Long
Dim dataCol As Long
Dim ws As Worksheet

dataRow = 1
dataCol = 2
Set ws = ActiveWorkbook.ActiveSheet

For linkRow = 1 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
With CreateObject("InternetExplorer.Application")
.Visible = False
.navigate ws.Cells(linkRow, 1)
Do While .busy: DoEvents: Loop

Set linksAll = .document.getElementsByTagName("a")
For Each linkOne In linksAll
ws.Cells(dataRow, dataCol) = linkOne.href
ws.Cells(dataRow, dataCol + 1) = "'" & linkOne.outertext
dataRow = dataRow + 1
Next linkOne

dataRow = 1
dataCol = dataCol + 2
.Quit
End With
Next linkRow
End Sub

Das Problem dabei ist jedoch, dass der IE komplett veraltet ist. Deshalb funktioniert das Ganze bereits nicht mehr mit den Hotel-URLs aus der Beispielmappe. Der IE führt den enthaltenen JS Cade nämlich nicht aus, weshalb die Seite bis auf sehr wenige Elemente gar nicht aufgebaut wird. Einfach mal visible = True setzen und .Quit auskommentieren. Das dürfte mit vielen Seiten so sein, da der IE, wie gesagt, komplett veraltet ist.

Alternativ könnte xhr verwendet werden, wobei sich allerdings am Ende das gleiche Problem ergibt. Mit xhr wird genau ein Dokument vom WebServer abgerufen, welches dann genau in der ausgelieferten Form zur Verfügung steht. Es wird kein JS ausgeführt. Für beliebige Seiten ist das also auch unbrauchbar.

Die Lösung wäre vermutlich SeleniumBasic, um Chrome oder Edge zu automatisieren. Das muss aber installiert werden. Zusätzlich muss der WebDriver zum gewählten Browser installiert und aktuell gehalten werden. Letzteres lässt sich wohl auch automatisieren. SeleniumBasic kommt aber nur in Frage, wenn auf dem Rechner, auf dem gearbeitet wird, entsprechende Rechte bestehen. In Unternehmen bestehen diese Rechte regelmäßig nicht.

Es gibt auch einen Edge "Hack". Für diesen muss aber die Regestry manipuliert werden, was in Unternehmen ungefähr so gern gesehen ist, wie ein Weißer Hai beim Tauchen ;-) Ich habe diese Möglichkeit Edge direkt aus VBA zu steuern allerdings bisher selbst noch nicht ausprobiert.

Viele Grüße,

Zwenn
Anzeige
AW: @ Piet, Makro, das Links von Internetseiten auflistet
29.12.2023 20:13:49
Christian
Hallo Zwenn,

erstmal danke, mache mich sofort ans Testen.

Aber ich kann dich schonmal beruhigen. Die Daten, die ich benötige, schafft das Makro noch runterzuladen.
Die 3 URL's waren jetzt einfach zufällige Beispiele.

Ich werde dann mal testen. Bis gleich

Christian
Testergebnis
29.12.2023 20:25:25
Christian
Hallo Zwenn,

ich bin jetzt etwas überrascht. In meiner Originaldatei klappt alles wie es soll. Erstmal danke dafür

Aber in meiner Testdatei mit den Links von Gmx, Herber und Facebook habe ich erst die spalten B und C in Tabelle2 gelöscht und dann das Makro ausgeführt und dann blieben die Spalten D und E, in denen die Links von Herber hätten stehen sollen, leer. Nur die Links von GMX und Facebook sind erschienen.

Datei geschlossen, wieder geöffnet, dasselbe nochmal und dann ging es.
Das kann ich mir nicht erklären. Aber solange die Originaldatei geht, ist alles in Butter

Vielen Dank an alle Helfer und einen guten Rutsch
Christian
Anzeige
AW: Testergebnis
29.12.2023 21:12:07
Zwenn
Hallo Christian,

bei meinen kurzen Tests habe ich das Gleiche beobachtet. Es wurden nicht immer alle Daten in die Spalten geschrieben. Wenn es nicht klappte, blieben die Spalten ganz frei. Woran das liegt kann ich nicht sagen. Mit dem IE setze ich mich auch nicht mehr auseinander.

Warum hast Du Dich gewundert, dass es funktioniert? In Deinem Ursprungsmakro mussten nur Code für die Zeilen und Spalten an andere Stellen sortiert werden. Das ist nur Zuordnung gewesen. Der ganze Rest war ja schon funktional.

Viele Grüße,

Zwenn
AW: Testergebnis
29.12.2023 21:59:37
Christian
Hallo Zwenn,

ok, das war ein wenig blöd ausgedrückt, die Verwunderung kam daher weil halt vorher bei der Testdatei eine Spalte gefehlt hat. Das ist alles.

Gruß
Christian
Anzeige
kleiner Nachtrag
30.12.2023 18:20:36
Christian
Habe das Problem mit den leeren Spalten umgangen, indem ich ihn nach jedem Link in Spalte A eine Sekunde warten lasse.

Blöderweise verlängert sich das ganze bei 740 Links dann auch um ca. 12 Minuten.

Aber besser als fehlende Daten, so oft benutze ich das Makro dann auch nicht, dass 12 Minuten jetzt zur Katastrophe werden.
AW: @ Piet, Makro, das Links von Internetseiten auflistet
29.12.2023 15:06:42
Piet
Hallo an beide

@ralf_b würde mich freuen wenn dein Code passt, dann wäre cder Thread beendet. Toi, toi, toi ....

Ich habe mir das letzte Beispiel angesehen. Dabei fiel mir auf, das es offenbar 3 verschiedene Link Rubriken gibt.
Wenn ich das Beispiel richtig verstanden habe soll jede Rubrik in einer eigenen Doppelspalte stehen, insgesamt 6 Saplten.
Ich habe aber noch nicht verstanden woran ich die Rubriken unterscheiden kann??? Eine Lösung habe ich dafür nicht.

Mal abwarten was Christian zu deinem Code sagt??? Frohes neues Jahr an euch beide.

mfg Piet
Anzeige
AW: @ Piet, Makro, das Links von Internetseiten auflistet
29.12.2023 17:40:04
Christian
Hallo Ralf,
hallo Piet,

leider auch nicht.
Aber ich denke auch nicht mehr weit weg.
Mal programmiertechnisch ausgedrückt, die Änderung der Spalten müsste bei jedem Durchlauf der äußeren for-Schleife geschehen, nicht bei jedem durchlauf der inneren for-schleife.

Ich denke dann wäre das Problem gelöst.

Gruß
Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige