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

Bilder zu URLs anzeigen

Bilder zu URLs anzeigen
12.02.2020 19:54:04
Kisska
Hallo zusammen,
ich suche nach einem einfachen Makro für meine persönliche Mappe, um Bilder aus den URLs anzeigen zu lassen.
Mein Tabellen-Aufbau:
A2 bis A27: Artikelnummer
B2 bis A27: Buchstabe
C2 bis A27: URL (URL setzt sich zusammen aus Text sowie Eingabe in den Spalten A und B)
D2 bis A27: hier sollen die Bilder zu den URLs aus der Spalte C angezeigt werden
Im Internet habe ich eine Lösungsvariante über Funktionen gefunden:
https://www.computerbase.de/forum/threads/internet-bild-link-in-excel-anzeigen.1215653/
Code lautet:

Function InsertPicFromURL(URL As String) As String
With ActiveSheet.Pictures.Insert(URL)
.Top = Application.Caller.Top + 1
.Left = Application.Caller.Left + 1
.Height = Application.Caller.Height - 2
End With
InsertPicFromURL = ""
End Function

Über diese Formel ab D2 lassen sich die Bilder tatsächlich anzeigen:

=PEROSONAL.XLSB!nsertPicFromURL(C2)

Was mir bei dieser Lösung nicht gefällt:
Wenn ich neue Daten in A und B eingebe bzw. einkopiere, dann verändern sich meine zusammengesetzten Hyperlinks in der Spalte C, aber in der Spalte D werden keine neuen Bilder automatisch erzeugt. Dafür muss man die Zellen D2 bis D27 mit Enter abschließen oder jeweils F2 drücken. Das ist umständlich.
Man könnte mit diesem Makro das Blatt neu berechnen: ActiveSheet.Cells.Dirty
aber diese Prozedur beansprucht viel Leistung und dauert recht lange oder es ist diese Funktion, die Prozesse verlangsamt.
Darum die Frage: Gibt es eine bessere Lösung, die nicht soviel Rechnerleistung beansprucht? Nach einer Eingabe/Einkopieren neuer Daten in A und B sollen neue Bilder in D in Abhängigkeit der URLs in C angezeigt werden, vorher müssen aber die alten Bilder gelöscht werden.
Mir ist es egal, ob die Bilder interaktiv zu den URLs angezeigt werden oder erst nach Ausführen des Makros.
Viele Grüße
Kisska

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bilder zu URLs anzeigen
14.02.2020 09:07:53
fcs
Hallo Kisska,
eine Lösung via Persönliche Arbeitsmappe müsste alle - nicht nur die geänderten Links aktualisieren.
Dabei bleibt die Formel für die Bilder nicht permanent in den Zellen, sondern wird nur zum AKtualisieren temporär eingefügt.
Hier die angepasste Funktion und das Makro zur Aktualisierung der Bilder.
Public Function InsertPicFromURL(URL As String) As String
On Error GoTo Fehler
If URL  "" Then
With ActiveSheet.Pictures.Insert(URL)
.Top = Application.Caller.Top + 1
.Left = Application.Caller.Left + 1
.Height = Application.Caller.Height - 2
End With
End If
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbInformation + vbOKOnly, "InsertPicFromURL - Linkk: " & URL
End Select
End With
InsertPicFromURL = ""
End Function
'Makro für Version in persönlicher Arbeitsmappe
Public Sub Bilder_aktualisieren()
Dim wks As Worksheet
Dim objShape As Shape
Dim Zeile As Long
Dim StatusCalc As Long
With Application
'Berechnungsmodus merken
StatusCalc = .Calculation
'Berechnungsmodus auf manuell setzen
.Calculation = xlCalculationManual
End With
Set wks = ActiveSheet
With wks
'Alte bilder in SPalte D löschen
For Each objShape In .Shapes
If objShape.TopLeftCell.Row > 1 And objShape.TopLeftCell.Column = 4 Then
objShape.Delete
End If
Next
'Zellen in Spalte D abarbeiten
For Zeile = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
'Formel um Grafik zu Hyperlink in Zelle zu holen in Spalte D einfügen
.Cells(Zeile, 4).FormulaR1C1 = "=PERSONAL.XLSB!InsertPicFromURL(RC[-1])"
Next
'In Zellen ab Zeile 2 in Spalte D "'" eintragen
.Range(.Cells(2, 4), .Cells(.Cells(.Rows.Count, 3).End(xlUp).Row, 4)) = "'"
End With
With Application
'Berechnungsmodus zurücksetzen
.Calculation = StatusCalc
End With
End Sub
Wenn du die Funktionalität komplett in deine Datei integrierst, dann kann man es so steuern, dass jeweils nur die geänderten Links aktualisiert werden müssen.
Hier Beispiel-Datei.
https://www.herber.de/bbs/user/135197.xlsm
LG
Franz
Anzeige
super! Zusatzfrage
15.02.2020 15:43:23
Kisska
Hallo Franz,
hab beide deiner Makros getestet und alles funktioniert perfekt! Besten Dank dafür !!!
Ich habe eine Zusatzfrage:
Wenn das Bild nicht existiert, dann wird ein weißes Viereck eingefügt. Kann man in der Spalte E mit einem "x" ausweisen, ob das Bild existiert ? Oder noch besser direkt den Buchstaben aus der Spalte B in die Spalte E übernehmen, wenn das Bild existiert.
Mein Ziel ist es, zu den Bildern eines Artikels, die existieren, die Buchstaben aus der Spalte B nebeneinander zu schreiben.
Beispiel: Zu dem Artikel "123" gibt es drei Bilder: 123_B, 123_H und 123_X
Mit deinem obigen Makro bekomme ich diese drei Bilder angezeigt und kopiere aus der Spalte B die gefundenen Buchstaben B, H und X in die Spalte E rein. Dann kopiere ich die Spalte E in die temporäre Spalte G, entferne die Leeren, kopiere die Spalte G und transponiere diese in H1 und hab dann: H1 = B, I1 = H und J = X.
Hinweis: Zu jedem Artikel finde ich i.d.R. 2 bis 5 Bilder, die Buchstaben aus der Spalte B sind immer unterschiedlich.
Viele Grüße
Kisska
Anzeige
AW: super! Zusatzfrage
15.02.2020 16:26:49
Kisska
Hier habe ich einen Code für das Transponieren gefunden und etwas angepasst:
Sub TransponierenOhneLeere()
ActiveSheet.Range("E2:E27").Copy
ActiveSheet.Range("H1").Select
Selection.PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub

(Quelle: https://www.herber.de/forum/archiv/1524to1528/1527581_Spalte_kopieren_und_transponieren.html)
Was dem Code noch fehlt ist das Entfernen von Leerzellen und löschen von alten Daten ab der Spalte H bevor neue Daten aus der Spalte E transponiert werden. Da reichen meine VBA-Kenntnisse nicht aus.
VG, Kisska
Anzeige
AW: super! Zusatzfrage Bilder per Formel einfügen
18.02.2020 12:13:57
fcs
Hallo Kisska,
ich hab mal versucht deine Zusatfrage irgendwie umzusetzen.
Schau mal ob das in die gewünschte Richtung geht.
Datei mit Ereignismakros - Markierung mit "neu" wenn Link geändert /eingefügt wird.
https://www.herber.de/bbs/user/135265.xlsm
Textdatei mit den Makros für die persönliche Makroarbeitsmappe.
https://www.herber.de/bbs/user/135264.txt
LG
Franz
AW: super! Zusatzfrage Bilder per Formel einfügen
20.02.2020 01:09:11
Kisska
Hallo Franz,
zunächst vielen Dank für deine Zeit und die Lösungsvorschläge.
Ich habe deine "Textdatei mit den Makros für die persönliche Makroarbeitsmappe" getestet, jedoch werden alle Werte aus der Spalte B 1:1 kopiert statt nur diejenigen, wo die Bilder tatsächlich existieren.
Ich habe inzwischen meine Tabelle um 2 Spalten nach rechts verschoben und mehr Zeilen hinzugefügt für die Anzeige der Bilder gleich für 7 Artikel (diese können potentiell jeweils Bilder A bis Z haben).
Hierfür verwende ich folgende Makros:
1) Makro um Bilder zu finden ohne Funktionen

'Quelle: https://superuser.com/questions/940861/how-can-i-display-a-url-as-an-image-in-an-excel-cell
Option Explicit
Dim rng As Range
Dim cell As Range
Dim Filename As String
Sub URLPictureInsert()
Dim theShape As Shape
Dim xRg As Range
Dim xCol As Long
On Error Resume Next
Application.ScreenUpdating = False
'Alle vorhandenden Bilder l?schen
For Each theShape In ActiveSheet.Shapes
theShape.Delete
Next theShape
Set rng = ActiveSheet.Range("E2:E183")   '  0 Then   '
2) Nachdem die Bilder nach dem ersten Makro angezeigt sind, kopiere ich die jeweiligen Buchstaben maniell in die Spalte G ein.
3) Makro für Transponieren

Sub TransponierenOhneLeere()
'Artikel1
With ActiveSheet
.Range("G2:G27").Copy
.Range("J1").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("J1:AI1").SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
'Artikel2
With ActiveSheet
.Range("G28:G53").Copy
.Range("J2").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("J2:AI2").SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
'Artikel3
With ActiveSheet
.Range("G54:G79").Copy
.Range("J3").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("J3:AI3").SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
'Artikel4
With ActiveSheet
.Range("G80:G105").Copy
.Range("J4").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("J4:AI4").SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
'Artikel5
With ActiveSheet
.Range("G106:G131").Copy
.Range("J5").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("J5:AI5").SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
'Artikel6
With ActiveSheet
.Range("G132:G157").Copy
.Range("J6").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("J6:AI6").SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
'Artikel7
With ActiveSheet
.Range("G158:G183").Copy
.Range("J7").PasteSpecial Paste:=xlValues, Transpose:=True
.Range("J7:AI7").SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
End Sub
Ich wünschte, ich könnte auf den manuellen Schritt 2 verzichten und alles in einem Rutsch machen.
Kannst du mir dabei helfen?
VG, Kisska
Anzeige

42 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige