Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1532to1536
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

Hyperlink-Adressen in seperatem Blatt auflisten

Hyperlink-Adressen in seperatem Blatt auflisten
31.12.2016 21:44:51
Jenny
Hallo an euch alle,
suche eine möglichst (aufgrund der Menge an Inhalten) zeitsparende Möglichkeit, folgendes zu realisieren und würde mich freuen, wenn ihr mich beratet wie das möglichst schnell geht.
Es geht um ca. 300 Internetseiten, die ich nacheinander vorhabe in Tabelle 1 zu kopieren.
Wenn ich die erste Seite kopiert habe, stehen in den Zellen A8, A20, A32, A44, A56, A68, A80, A92 und A104 Hyperlinks.
Es gibt noch mehr Hyperlinks, aber die anderen sind irrelevant.
Mein Ziel ist es in Tabelle2 die Adressen dieser Hyperlinks aufzulisten, von allen 300 Seiten.
Und nach jeder neuen Auflistung Tabelle1 wieder zu löschen, da jedesmal auch viele Bilder dabei sind und die Rechenzeit sich extrem aufblähen würde.
Also nochmal kurz zusammengefasst:
1. Ich kopiere den Inhalt einer Internetseite nach Tabelle1
2. die Adressen der Hyperlinks in oben genannten Zellen sollen in Tabelle2 aufgelistet werden.
3. Der Inhalt von Tabelle1 soll inkl. der Bilder wieder gelöscht werden.
Habt ihr eine Idee wie sich das möglichst mit wenig Zeitaufwand für mich realisieren lässt?
Gruß, danke und guten Rutsch
Jenny
PS: Es ist nicht so zeitkritisch, dass jemand sich die Mühe an Silvester oder am Neujahrstag machen muss, feiert lieber schön.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hyperlink-Adressen in seperatem Blatt auflisten
01.01.2017 09:44:54
Beverly
Hi Jenny,
versuche es mal so:
Sub Linkadressen()
Dim lngZeile As Long
Dim lngZiel As Long
Dim shaShape As Shape
With Worksheets("Tabelle2")
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count) + 1
For lngZeile = 8 To 104 Step 12
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
.Cells(lngZiel, 1) = Cells(lngZeile, 1).Hyperlinks(1).Address
lngZiel = lngZiel + 1
End If
Next lngZeile
End With
ActiveSheet.Cells.Clear
For Each shaShape In ActiveSheet.Shapes
shaShape.Delete
Next shaShape
End Sub


Anzeige
AW: Hyperlink-Adressen in seperatem Blatt auflisten
01.01.2017 10:18:01
Jenny
Hallo Karin,
danke erstmal für deine Mühe, und ein frohes neues Jahr.
leider gibt es einen kleinen Schönheitsfehler.
Es wird der Inhalt von Tabelle2 gelöscht und Tabelle1 bleibt bestehen.
Außerdem noch eine andere Frage, gibt es eine Möglichkeit das noch weiter zu automatisieren, im Sinne von dass das Makro von sich aus startet, sobald ich etwas in Tabelle1 einfüge?
Vielen vielen Dank auf jeden Fall
Jenny
AW: Hyperlink-Adressen in seperatem Blatt auflisten
01.01.2017 11:03:06
Beverly
Hi Jenny,
der Code muss ausgeführt werden wenn Tabelle1 aktiv ist - das siehst du u.a. daran, dass mit der Zeile For Each shaShape In ActiveSheet.Shapes alle Shapes im aktiven Tabellenblatt gelöscht werden - und in Tabelle1 befinden sich ja deine Shapes (eingefügten Bilder).
Benutze das Change-Ereignis der Tabelle1 um das Makro zu starten.


Anzeige
AW: Hyperlink-Adressen in seperatem Blatt auflisten
01.01.2017 12:25:23
Jenny
Hallo Karin,
ok, auf dem Weg klappt das mit dem Löschen,
aber "Benutze das Change-Ereignis der Tabelle1 um das Makro zu starten."
Gut wenn es sowieso vollautomatisch gehen soll, gibt es ja auch keinen Anlass zur Tabelle2 zu wechseln, also sollte das mal kein Problem sein.
aber "Benutze das Change-Ereignis der Tabelle1 um das Makro zu starten."
Was du da sagst sind für mich leider böhmische Dörfer.
Gruß
Jenny
ich traue mir offensichtlich zu wenig zu...
01.01.2017 12:37:33
Jenny
das hier funktioniert: (dank Google)
aber eine blöde Frage muss ich doch noch stellen, bin halt Laiin, weshalb fängt er bei Zeile 2 an aufulisten und nicht bei Zeile 1?
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Application.Intersect(Target, Range("A1:A110"))
If Target Is Nothing Then Exit Sub
On Error GoTo ErrorHandler
Application.EnableEvents = False
Dim rngZelle As Range
For Each rngZelle In Target
Dim lngZeile As Long
Dim lngZiel As Long
Dim shaShape As Shape
With Worksheets("Tabelle2")
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
For lngZeile = 8 To 104 Step 12
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
.Cells(lngZiel, 1) = Cells(lngZeile, 1).Hyperlinks(1).Address
lngZiel = lngZiel + 1
End If
Next lngZeile
End With
With Worksheets("Tabelle1")
ActiveSheet.Cells.Clear
For Each shaShape In ActiveSheet.Shapes
shaShape.Delete
Next shaShape
End With
Next rngZelle
ErrorHandler:
Application.EnableEvents = True
End Sub

Anzeige
AW: ich traue mir offensichtlich zu wenig zu...
01.01.2017 13:00:35
Werner
Hallo Jenni,
weil du hiermit die erste belegte Zelle (von unten nach oben) in Spalte A ermittelst. Mit +1 wird dann auf die ermittelte Zeile noch 1 draufaddiert.
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .  _
Rows.Count) + 1
Das hat dann aber folgenden Effekt. Ist die komplette Spalte A leer, dann wird Zeile 1 ermittelt, da wird dann noch 1 draufaddiert, so dass die Ausgabe dann ab Zeile 2 erfolgt.
Zwei Möglichkeiten das aufzufangen:
1. Eine Überschrift in die erste Zeile, dann passt es wieder
2. wenn du keine Überschriften haben willst
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .  _
Rows.Count) + 1
If .Cells(1, 1) = "" Then lngZiel = 1
Gruß Werner
Anzeige
AW: End(xlu) - Funktion
01.01.2017 14:39:12
Gerd
Prosit Neujahr!
Nebenbei, das hat Jenny nicht gefragt, kann man mit dem Ergebnis + 1 wenig anfangen,
wenn die (allerletzte Zelle der Spalte Empty ist.
Gruß Gerd
Fast richtig, aber...
01.01.2017 14:29:15
Beverly
...mit deinem Code wird das Change-Ereignis mehrmals ausgeführt, die Daten also mehrfach übertragen werden (da du in einer Schleife über jede Zelle im Bereich A1:A110 läufst) - was sicher nicht Sinn und Zweck des ganzen sein soll. Ich nehme an, dass du immer den Cursor in A1 setzt und dann das Kopierte einfügst - in dem Fall reicht dies aus:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeile As Long
Dim lngZiel As Long
Dim shaShape As Shape
If Target.Cells(1).Address(False, False) = "A1" Then
With Worksheets("Tabelle2")
If .Range("A1") = "" Then
lngZiel = 1
Else
lngZiel = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp). _
Row, .Rows.Count) + 1
End If
For lngZeile = 8 To 104 Step 12
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then
.Cells(lngZiel, 1) = Cells(lngZeile, 1).Hyperlinks(1).Address
lngZiel = lngZiel + 1
End If
Next lngZeile
End With
Application.EnableEvents = False
ActiveSheet.Cells.Clear
Application.EnableEvents = True
For Each shaShape In ActiveSheet.Shapes
shaShape.Delete
Next shaShape
End If
End Sub

Ich hatte angenommen, dass in Zeile 1 der Tabelle2 eine Überschrift steht - Code ist entsprechend geändert.


Anzeige
AW: Fast richtig, aber...
01.01.2017 16:37:16
Jenny
Hallo ihr drei,
sorry aber jetzt verstehe ich nur noch Bahnhof.
Also erstmal Karin, dein Makro funktioniert.
Aber du sagst Daten würden in meinem Makro mehrfach übertragen, ich hatte bei meinem Test genau 9 Einträge in Tabelle2 mit meinem Makro.
Aber du hast schon recht, habe natürlich vor, die Daten immer von Zeile 1 an einzufügen, damit die Hyperlinks auch in den richtigen Zellen stehen.
Aber mal noch eine andere Frage, wenn ich das Makro richtig verstehe, muss nicht zwangsweise in jeder der Zellen ein Hyperlink stehen, es funktioniert auch, wenn eine (mehrere) der Zellen leer sind, oder?
ZU der Diskussion zwischen Werner und Gerd, ich denke Werner hat mich richtig verstanden, es ging mir darum weshalb die erste Zeile frei bleibt.
Gerds Einwand kann ich leider nicht nachvollziehen, welche Spalte meinst du?
Gruß
Jenny
Anzeige
AW: Fast richtig, aber...
01.01.2017 17:05:25
Beverly
Hi Jenny,
Frage1 - weshalb mehrfach durchlaufen: kommentiere mal die folgenden Zeile im Code aus:
    ActiveSheet.Cells.Clear
und kopiere dann mal etwas ins Tabellenblatt - dann siehst du was ich meine. Durch das Löschen der Zellinhalte wird die Schleife zwar nur einmal durchlaufen, aber sie ist eben unnötig.
Zu Frage2 - müssen in allen Zellen Hyperlinks stehen? Nein, müssen nicht - falls kein Link vorhanden ist, wird die Zelle ausgelassen, denn es wird ja geprüft, ob ein Link vorhanden ist, und zwar mit dieser Zeile
If Cells(lngZeile, 1).Hyperlinks.Count > 0 Then

Werner hat dich richtig verstanden und das habe ich in den Code ja auch eingebaut.


Anzeige
AW: End(xlUp)-Funktion
01.01.2017 17:28:32
Gerd
Hallo Jenny,
zur Frage 3!
Ungeachtet der Frage erste Zelle leer / nicht leer
und unterstellt, das maßgebliche Blatt ist ein Worksheet.
Sub test()
Columns("A").Clear
MsgBox "Spalte A wurde geleert"
MsgBox "Spalte A hat " & Columns("A").Rows.Count & " Zeilen"
MsgBox "Zeile letzter gefüllter Zelle in Spalte A: = " & Cells(Rows.Count, 1).End(xlUp).Row
MsgBox "Die allerletzte Zelle in Spalte A wird mit XXX gefüllt"
Cells(Rows.Count, 1) = "XXX"
MsgBox "Zeile letzter gefüllter Zelle in Spalte A: = " & Cells(Rows.Count, 1).End(xlUp).Row
MsgBox " Weil das Ergebnis nicht stimmt, nehmen wir diese Ausnahme mit in die Abfrage"
Dim loLetzte As Long
loLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
MsgBox "Letzte Zeile: " & loLetzte
MsgBox "Jetzt setzen wir für die nächste freie Zelle darunter #loLetzte + 1"
Cells(loLetzte + 1, 1).Select
End Sub
Gruß Gerd
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige