online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon MaxMustermann vom 11.02.2020, 11:17 Options

nich zielführende Hyperlinks per Makro aus dem Excel löschen

Hallo!
Ich hoffe ihr könnt mir helfen.
Ich habe in einem Excelfile Bilder verlinkt und möchte dass der Inhalt in den Zellen in denen der Link kein Ziel hat (also noch ein Bild vorhanden ist) gelöscht wird. Der Hyperlinkt wird automatisch mit =HYPERLINK("C:\"&A1&".pdf";A1) erstellt und ich verwende Excel 03.

vielen Dank!


Antwort schreiben

Antwort 1 von Beverly vom 11.02.2020, 21:13 Options

Hi Max,

soll der gesamte Inhalt der Zelle mit dem nicht mehr existierenden Link gelöscht werden? Vorsicht - besser an einer Kopie der Tabelle testen!

Sub hylink_loeschen()
    Dim raZelle As Range
    Dim strBild As String
    Dim strZelle As String
    For Each raZelle In ActiveSheet.Cells.SpecialCells(xlFormulas)
        strBild = Mid(raZelle.Formula, InStr(raZelle.Formula, "(") + 2, _
            InStrRev(raZelle.Formula, "\") - InStr(raZelle.Formula, "(") - 1)
        strZelle = Mid(raZelle.Formula, InStr(raZelle.Formula, "&") + 1, _
            InStrRev(raZelle.Formula, "&") - InStr(raZelle.Formula, "&") - 1)
        If Dir(strBild & Range(strZelle) & ".jpg") = "" Then raZelle = ""
    Next raZelle
End Sub


Bis später,
Karin

Antwort 2 von lorf55 vom 11.02.2020, 22:56 Options

Ich habe mal so etwas mit excel 2000 gebastelt. Die Lösung benutzt Scripting, das sollte nicht deaktiviert sein.

Sub DelHyperlinks()
' Hyperlinks des aktiven Tabellenblattes werden 
' auf vorhandene Dateien überprüft.
' Tote Links werden gelöscht.

Dim i As Integer
i = 1
Set fs = CreateObject("Scripting.FileSystemObject")
For Each h In ActiveSheet.Hyperlinks
  If Not fs.FileExists(h.Name) Then
     ActiveSheet.Hyperlinks(i).Range.ClearContents
  End If
  i = i + 1
Next
End Sub


Bei mir hat es getan, was es soll. Ich hoffe bei dir auch.
MfG
lorf55

Antwort 3 von lorf55 vom 11.02.2020, 23:11 Options

Huch, ich habe
Zitat:
=HYPERLINK("C:\"&A1&".pdf";A1)
nicht beachtet. Ich ziehe meine Lösung zurück. Die funktioniert nur, wenn man den kompletten Dateinamen über Einfügen-Hyperlink einfügt.
Schade, schade.

Bis denn

Antwort 4 von MaxMustermann vom 12.02.2020, 08:21 Options

Hallo!

Vielen Dank für die Antworten!

Nochmals kurz zu meinem konkreten Problem: Ich möchte in einer Excel Tabelle ca. 700 Bilder verlinken, sodass man zu den jeweilugen Namen (stehen in einer eigenen Spalte) bei Bedarf einen Link anklicken kann und dann ein Bild dazu sieht. Da ich nicht 700 Mal über rechte Maustaste ... einen Link einfügen wollte habe ich das Problem mit dem Befehl "=HYPERLINK..." gelöst. Das funktioniert soweit sehr gut. Nun ist es aber so, dass noch nicht alle 700 Bilder geschossen worden sind, und es ab und zu vorkommen kann, dass ein Bild gelöscht wird. Und damit nicht in jeder Zelle ein Link steht, und dann garkein Bild verknüpft ist, dachte ich es wäre sinnvoll, irgendwie darzustellen, dass der Link nicht funktioniert .... löschen war das naheliegenste :D Da müsste man dann einfach bei ergänzung eines Bildes die Zellen neu Befüllen und fertig. Bin aber nicht so fit auf diesem Gebiet, wenn es als von Eurer Seite bessere Vorschläge gibt, würde ich mich freuen.

@Karin: werde gleich ausprobieren ob das funktioniert, muss zuerst mal sehen wie man Makros erstellt ;)

lG

Antwort 5 von MaxMustermann vom 12.02.2020, 08:49 Options

Hallo nochmal:
Fnktioniert leider nicht: Laufzeitfehler 5, ungültigeer Prozeduraufruf oder ungültiges Argument
Im Debugger sind folgende Zeilen gelb unterlegt:
strBild = Mid(raZelle.Formula, InStr(raZelle.Formula, "(") + 2, _
InStrRev(raZelle.Formula, "\") - InStr(raZelle.Formula, "(") - 1)

Vielen Dank aber für die Mühe :D Ich hoffe wir finden eine Lösung...

lg

Antwort 6 von lorf55 vom 12.02.2020, 10:17 Options

Hallo Max,

Ich vermute, der Laufzeitfehler kommt daher, dass du deine Hyperlink-Verknüpfung nicht so gemacht hast, wie du oben angegeben hast. Bei mir hat Karins Makro jedenfalls funktioniert.

Nachdem ich mir deine 2. Antwort durchgelesen habe, glaube ich, dass es besser ist, wenn du die Hyperlinks direkt anhand der vorhandenen Dateien setzt (denn braucht man nämlich nicht löschen, was man sowieso nicht hat). Deshalb habe ich mal ein Makro dazu gemacht:

Sub HyperlinksSetzen()
Dim Pfad, Name As String
Dim i As Integer
i = 1
Pfad = Range("A1")
Name = Dir(Pfad, vbDirectory)    ' Ersten Eintrag abrufen.
Do While Name <> ""    ' Schleife beginnen.
    ' Aktuelles und übergeordnetes Verzeichnis ignorieren.
    If Name <> "." And Name <> ".." Then
        ' Sicherstellen, daß Name kein Verzeichnis ist.
        If (GetAttr(Pfad & Name) And vbDirectory) <> vbDirectory Then
            With ActiveSheet
                .Hyperlinks.Add Anchor:=Cells(i, 2), _
                Address:=Pfad & Name, _
                ScreenTip:=Name, _
                TextToDisplay:="Foto " & Name
            End With
            i = i + 1
        End If   
    End If
    Name = Dir
Loop
End Sub


Das Makro geht das Verzeichnis durch, dessen Name in A1 angegeben ist und setzt die Hyperlinks in Spalte B ab B1. Unterverzeichnisse werden ignoriert.

lorf55

Antwort 7 von MaxMustermann vom 12.02.2020, 11:21 Options

Hallo lorf55,

vielen Dank für dein Makro, es funktioniert soiweit. Einziges Problem: Die Bilder werden in irgendeiner Reihenfolge alle untereinander verlinkt. Wichtig für meine Liste ist, dass das entsprechende Bild genau in der zugehörigen Zeile steht, ist das noch irgendwie möglich??

Den Hyperlink habe ich eigentlich genau so erstellt. Werds aber nochmal versuchen, wenn es bei dir funktiert hat, muss es bei mir ja auch gehen.

Vielen Dank!

Antwort 8 von MaxMustermann vom 12.02.2020, 11:32 Options

...also es funktioniert bei mir einfach nicht ... irgendwo muss ich einen fehler gemacht haben. der Hyperlinkbefehl sieht genau so aus: =HYPERLINK(H$5&C15&"_"&G15&".jpg";C15)
...sollte doch eigentlich passen oder? Die Bilder liegen im Ordner dessen Paf auf H5 hinterlget ist z.B D:/Ordner/Bilder/ und die bilder heißen so wie in Zelle C15 dann kommt ein "_" und ".jpg" Angezeigt wird der Name aus C15

grüße!

Antwort 9 von MaxMustermann vom 12.02.2020, 11:37 Options

... gibt leider kein editieren, desshalb noch ein beitrag von mir :D

man müsste doch eigentlich nur statt Name = Dir(Pfad, vbDirectory) ,
Name=C15 realisieren oder?

Antwort 10 von MaxMustermann vom 12.02.2020, 15:56 Options

... so da bin ich nochmal :)
Habe die Aufgabe mit einem sverweis gelöst. Meine neues Problem ist nun, dass ich nicht möchte das im Fall keines vorhandenen Bildes der dargestellte Text ("kein Bild") ebenfalls ein Hyperlink ist.

Also mein Befehl in der Excelzelle lautet:
=WENN(ISTNV(SVERWEIS(E7;$C$1:$D$163;2;FALSCH));HYPERLINK($J$5&"nofoto.jpg";"kein Bild vorhanden");HYPERLINK($J$5&E7&"_"&I7&".jpg";E7))

wobei für dieses Probelm auch vereinfacht: =WENN(A1=x;HYPERLINK(C:\Bilder\test.jpg\;"Foto");"kein Bild vorhanden") reichen sollte.

Nun wird auch der Text "kein Bild vorhanden" als Hyperlink dargestell, das verstehe ich nicht und möchte es auch gerne ändern.
Hoffe ihr könnt mir helfen :)

lg

Antwort 11 von lorf55 vom 13.02.2020, 07:32 Options

@Antwort7:
Die Hyperlinks werden in der Version so angelegt, wie die Dateien auf der Platte angetroffen werden.
@Antwort8+9+10:
Vielleicht löst ja das nachfolgende Makro deine Probleme.
Aus deinen Angaben habe ich das Makro nochmal angepasst. Jede Zelle kriegt jetzt "ihren" Foto-Hyperlink und wer keinen hat kriegt "kein Bild vorhanden". Spalte B wird von B1 bis B700 vorneweg gelöscht.

Sub HyperlinksSetzen1()
Dim Pfad, Bildname, Name As String
Dim i, k, p As Integer
Pfad = Range("H5")
Bildname = Range("C15")
Range("B1:B700").ClearContents 

Name = Dir(Pfad & "\", vbDirectory) ' Ersten Eintrag abrufen.
' Aktuelles und übergeordnetes Verzeichnis ignorieren.
Name = Dir ' . überspringen
Name = Dir ' .. überspringen
Do While Name <> ""    ' Schleife beginnen.
    ' Sicherstellen, daß Name kein Verzeichnis ist.
    If (GetAttr(Pfad & "\" & Name) And vbDirectory) <> vbDirectory Then
        k = Len(Bildname) + 1
        p = InStr(k, Name, ".")
        Nr$ = Mid(Name, k, p - k) ' Bild hat diese Nr
        k = Val(Nr$)
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(k, 2), _
                       Address:=Pfad & Name, _
                       ScreenTip:=Name, _
                       TextToDisplay:=Bildname ' oder Name oder Bildname&Name
    End If
    Name = Dir
Loop ' Schleife beenden.
For i = 1 To 700
    If Cells(i, 2) = "" Then
            Cells(i, 2) = "kein Bild vorhanden"
    End If
Next i
End Sub



Grüße und so
lorf55

PS: Ich kann leider nicht den ganzen Tag hier miträtseln, deswegen kann ich dir erst heute antworten.

Antwort 12 von lorf55 vom 13.02.2020, 08:10 Options

PS : Wenn man
k = Len(Bildname) + 1

durch
k = InStr(1, Name, "_") + 1 
Bildname = Mid(Name, 1, k - 2)

ersetzt, wird der Namen des Bildes aus dem Dateinamen geholt, so dass man
Bildname = Range("C15")
löschen kann. Dadurch vermeidet man auch einige Fehlermöglichkeiten.

Gruß
lorf55

Antwort 13 von MaxMustermann vom 14.02.2020, 08:30 Options

Hallo lorf,

vielen Dank für dein neues Makro, doch leider funktioniert das bei mir jetzt überhaut nicht mehr ... der Pfad muss in H5 stehen, und die Liste der Bildernamen steht in Spalte C ab Zelle 15(?)

warum wird B1:B700 gelöscht?

vielen dank, und lg
Max

Antwort 14 von lorf55 vom 14.02.2020, 11:04 Options

Hallo Max,

Ich habe es jetzt noch mal überarbeitet, dass du die Liste der Bildnamen ab C15 hast und der Bildnamen nicht aus dem Dateianfang kommt. Der Pfad steht in H5. Deine 700 Bildnamen stehen ab C15 und wenn nicht wird der Dateiname genommen.

B1:B700 wird gelöscht, weil dort die Hyperlinks für deine 700 vorhandenen oder nicht vorhandenen Bilder durch das Makro rein geschrieben werden.

Sub HyperlinksSetzen2()
Dim Pfad, Bildname, Name As String
Dim i, k, p As Integer
Pfad = Range("H5")
i = 0
Range("B1:B700").ClearContents
Name = Dir(Pfad & "\", vbDirectory) ' Ersten Eintrag abrufen.
' Aktuelles und übergeordnetes Verzeichnis ignorieren.
Name = Dir ' . überspringen
Name = Dir ' .. überspringen
Do While Name <> ""    ' Schleife beginnen.
    ' Sicherstellen, daß Name kein Verzeichnis ist.
    If (GetAttr(Pfad & "\" & Name) And vbDirectory) <> vbDirectory Then
        k = InStr(1, Name, "_") + 1 'Len(Bildname) + 1
        p = InStr(k, Name, ".")
        Nr$ = Mid(Name, k, p - k) ' Bild hat Nr
        k = Val(Nr$)
        Bildname = Cells(15 + i, 3)  ' =C15
        If (IsEmpty(Bildname)) Then Bildname = Name
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(k, 2), _
                       Address:=Pfad & "\" & Name, _
                       ScreenTip:=Name, _
                       TextToDisplay:=Bildname 
        i = i + 1
    End If
    Name = Dir
Loop ' Schleife beenden.
For i = 1 To 700
    If Cells(i, 2) = "" Then
            Cells(i, 2) = "kein Foto"
    End If
Next i
End Sub


Ich hoffe, es passt jetzt so.

Grüße
lorf55

Ähnliche Themen

excel ändert automatisch die hyperlinks
slily  29.03.2007 - 229 Hits -

aus Excel Hyperlinks in pdf wandeln ???
HMu  15.08.2007 - 96 Hits -

Problem: Excel-Hyperlinks in PDF wandeln.
HMu  23.08.2007 - 108 Hits - 5 Antworten

Teile aus Hyperlinks im Excel - Arbeitsblatt suchen und ersetzen
KFK  09.10.2007 - 169 Hits - 2 Antworten

EXcel Hyperlinks
xacobeo  30.11.2007 - 200 Hits -

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026