Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Thumbnail zur Bilder-URL anzeigen lassen

Thumbnail zur Bilder-URL anzeigen lassen
15.04.2016 10:56:22
Juergen
Hallo zusammen,
es hat mir Rudi ja diesen genialen Code aufgezeigt aber schon muss ich was hinter her fragen:
  • 
    Private Sub cmdBild_einfuegen_Click()
    'Bild suchen und einfügen
    With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .InitialFileName = "c:\tmp\"
    .Filters.Add "Bilder", "*.jpg"
    .FilterIndex = .Filters.Count
    If .Show = -1 Then
    ActiveSheet.Hyperlinks.Add _
    Anchor:=Cells(Rows.Count, 1).End(xlUp).Offset(, 6), _
    Address:=.SelectedItems(1)
    End If
    End With
    End Sub
    

  • Es wird der URL-Link in die 7. Zelle der Zeile vom Bild geschrieben. Es stellte sich nun heraus, dass einen Vorabschau eines kleinen Thumbnails das Arbeiten mit der Tabelle erleichtern würde.
    Könnte man den Code dahin erweitern, dass zusätzlich in der Zelle 8 zur URL ergänzend ein kleines Bildchen angezeigt werden würde? Es sind jedoch die Bilder in unterschiedlichen Abmessungen vorhanden. So sollten die Thumb's gleich alle auf einheitliche Höhe reduziert und an die Zeilenhöhe angepasst werden.
    Vielleicht hat jemand eine Code-Erweiterungs-Idee :)
    Oder, es ist ganz einfach über einen Formel in Referenz zur URL Zelle zu handhaben? Denke aber nicht, da keine Anpassungen erfolgen bezügl. der Größe des Bildes, oder?
    Danke im voraus!
    Gruss, Juergen

    Anzeige

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Thumbnail zur Bilder-URL anzeigen lassen
    16.04.2016 13:36:57
    Christian
    hallo Jürgen,
    du könntest zB. das jpg als Bild in einen Kommentar der Zelle einfügen.
    Dabei:
    musst du zunächst die Höhe und Breite des Bildes ermitteln, damit es im Kommentar nicht verzerrt wird.
    Höhe und Breite erhältst du durch Analyse der Bytes oder durch Auslesen der EXIF-Daten oder ...
    Code: siehe unten
    Nachteil:
    Das Bild wird zwar kleiner dargestellt, in der Datei wird das Bild aber in nahezu voller Größe gespeichert. Somit wächst die XLS-Datei mit jedem Bild und bei zB. 100 Bildern à 2MB biste dann bei gut 200MB. Dateien dieser Größe kann man nicht mehr vernünftig handhaben.
    Alternativ-1:
    temporär das jpg in ein Diagramm importieren. Dieses Diagramm als Bild exportieren und speichern. Dieses jpg mit dem so verkleinerten Bild wie oben in einen Kommentar einfügen
    Alternativ-2:
    alle Bilder zunächste mit externen Tools (zB. Irfanview) verkleinern und in einem entspr. Ordner speichern und wie oben in einen Kommentar einfügen
    Alternativ-3:
    Nutzung diverser DLL's ....
    Option Explicit
    Sub Bildvorschau()
    ' - einfügen von Hyperlink zur gewählten JPG-Datei
    ' - einfügen JPG-Datei als Vorschau im Kommentar
    Dim wks As Worksheet
    Dim rng As Range
    Dim strFile As String
    Dim dblWdth As Double
    Dim dblHhgt As Double
    Dim cmt As Comment
    Dim sh As Shape
    Set wks = ActiveSheet
    Set rng = wks.Cells(wks.Rows.Count, 1).End(xlUp).Offset(, 6)
    rng.Comment.Delete
    rng.Value = ""
    With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .InitialFileName = "c:\tmp\"
    .Filters.Add "Bilder", "*.jpg"
    .FilterIndex = .Filters.Count
    If .Show = -1 Then
    strFile = .SelectedItems(1)
    Call GetJpgSize(strFile, dblWdth, dblHhgt)
    wks.Hyperlinks.Add Anchor:=rng, Address:=strFile
    Set cmt = rng.AddComment
    Set sh = cmt.Shape
    sh.Fill.UserPicture strFile
    sh.Height = 80
    sh.Width = sh.Height * dblWdth / dblHhgt
    End If
    End With
    Set sh = Nothing
    Set cmt = Nothing
    Set rng = Nothing
    Set wks = Nothing
    End Sub
    Function GetJpgSize(ByVal strFile As String, dblWdth As Double, dblHght As Double) As Boolean
    ' in Anlehnung an 'http://www.michael-schwimmer.de/vba061.htm
    Dim intFF As Integer, c As Long, lngPntr As Long
    Dim x As Byte, y As Byte, bytFlag As Byte
    intFF = FreeFile
    lngPntr = 1
    Open strFile For Binary Access Read As #intFF
    Get #intFF, 2, bytFlag
    Get #intFF, 5, x
    Get #intFF, 6, y
    c = CDbl(x) * 256 + CDbl(y)
    lngPntr = 6
    Do
    If (bytFlag = &HC2) Or (bytFlag = &HC0) Then
    Get #intFF, lngPntr + 4, x
    Get #intFF, , y
    dblWdth = CDbl(x) * 256 + CDbl(y)
    Get #intFF, lngPntr + 2, x
    Get #intFF, , y
    dblHght = CDbl(x) * 256 + CDbl(y)
    GetJpgSize = True
    Exit Do
    End If
    lngPntr = lngPntr + c - 2
    Get #intFF, lngPntr + 1, x
    If x  255 Then Exit Do
    Get #intFF, , bytFlag
    lngPntr = lngPntr + 2
    Get #intFF, lngPntr + 1, x
    Get #intFF, , y
    c = CLng(x) * 256 + CLng(y)
    lngPntr = lngPntr + 2
    Loop While bytFlag  &HD9
    Close #intFF
    End Function
    
    Grüße
    Christian

    Anzeige
    AW: Thumbnail zur Bilder-URL anzeigen lassen
    18.04.2016 15:26:20
    Juergen
    Hallo Christian,
    vielen Dank für deine Antwort.
    Leider scheidet Vorschlag 1+2 aus, denn der Monteur Vorort hat nur ein Tablet und muss ein schlankes Erfassungs-Tool an die Hand bekommen.
    Bei deinem Code in Vorschlag 3 bin ich jetzt etwas unsicher. Ist das als Modul gedacht?
    Ich weiss nicht so recht, was ich damit machen soll.....
    Anderer Gedanke:
    Wäre es möglich, einen Anzeigebereich auf dem Sheet zu definieren, in welchem immer bei Mouse over zum Hyperlink das dazugehörige Bild angezeigt werden würde? Wäre auch sehr hilfreich. Man müsste eben nur schnell einen Orientierung zum Bild bekommen.
    Gruss, Juergen

    Anzeige
    AW: Thumbnail zur Bilder-URL anzeigen lassen
    18.04.2016 16:16:06
    Juergen
    Nachtrag:
    ...ich habe die Exceltabelle in der Hyperlinks zu Bildern stehen. Das sieht je Zeile vereinfacht so aus:
    A1=Anschrift
    B1=Strasse
    C1=Ort
    D1=Einbaulage
    E1=HYPERLINK zum Bild
    F1= hier dann Bild aus E1 anzeigen lassen
    Kann ich mir in der Zelle F1 neben dem Hyperlink das dazugehörige Bild als Miniatur anzeigen lassen (ch möchte sie gern als 50x50px anzeigen lassen)? Einen Button benötige ich nicht dafür.
    Ich habe dazu folgenden Code gefunden, doch mit meinen mickrigen VBA Kenntnisse kann ich den nicht für mich hinbiegen. Weiss vielleicht jemand Rat? Danke im voraus!
    Gruss, Juergen
    ' **********************************************************************
    ' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
    Option Explicit
    Private Sub CommandButton1_Click()
    'PARAMETER: Tabelle, Spalte mit den Adresse, Spalte in die die Bilder sollen, Breite, Höhe
    PicFromURL Me, Range("V:V").Column, Range("Y:Y").Column, 50, 50
    End Sub
    ' Modul: Modul1 Typ: Allgemeines Modul
    Option Explicit
    Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
    szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
    Sub PicFromURL(Sh As Worksheet, URLColumn As Long, PICColumn As Long, PICWidth As Single,  _
    PICHeight As Single)
    Dim lngRow As Long, lngResult As Long
    Dim objPic As Object
    Dim strTmpFile As String, strExt As String
    With Sh
    For Each objPic In .Shapes
    If objPic.Type = msoPicture Then objPic.Delete
    Next
    For lngRow = 1 To .Cells(Rows.Count, URLColumn).End(xlUp).Row
    strExt = Mid(.Cells(lngRow, URLColumn).Text, InStrRev(.Cells(lngRow, URLColumn). _
    Text, "."))
    strTmpFile = Environ("Temp") & "\tmp" & strExt
    lngResult = URLDownloadToFile(0, .Cells(lngRow, URLColumn).Text, strTmpFile, 0, 0)
    If lngResult = 0 Then
    Set objPic = .Pictures.Insert(strTmpFile)
    objPic.Left = .Cells(lngRow, PICColumn).Left
    objPic.Top = .Cells(lngRow, PICColumn).Top
    objPic.ShapeRange.LockAspectRatio = False
    objPic.Width = PICWidth
    objPic.Height = PICHeight
    Kill strTmpFile
    End If
    Next
    End With
    Set objPic = Nothing
    End Sub
    

    Anzeige
    AW: Thumbnail zur Bilder-URL anzeigen lassen
    18.04.2016 16:46:35
    Christian
    Hallo Juergen,
    ja, mein Code gehört in ein allgemeines Modul.
    im Sub des Commandbutton rufst du dann das Makro "Bildvorschau" auf.
    Private Sub cmdBild_einfuegen_Click()
    Call Bildvorschau
    End Sub
    
    Allerdings:
    ersetze in meinem Code: "rng.Comment.Delete" durch "rng.ClearComments".
    Wenn du die Bilder entsprechend klein rechnest (zB. mit Irfanview) wächst die Datei auch nicht ins Unendliche.
    Gruß
    Christian
    PS: mit dem von dir geposteten Code wird die Bild-Datei auch in der Originalgröße in der Datei abgelegt. Allerdings entspr. verzerrt, da Breite und Höhe immer fix sind.

    Anzeige
    AW: Thumbnail zur Bilder-URL anzeigen lassen
    19.04.2016 09:01:27
    Juergen
    Hallo Christian,
    jetzt hab's sogar ich kapiert!
    Das ist ja genial in einem Streich URL & kleines Vorschaubild zum Datensatz zu plazieren!!! Super Lösung, ich danke dir herzlichst für diese Hilfe!!
    Hier ein Screenshot, für jemand der ähnliches sucht:

    Gruss, Juergen

    Anzeige
    Danke für die Rückmeldung owT
    19.04.2016 11:25:31
    Christian
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    Thumbnail zur Bilder-URL anzeigen lassen


    Schritt-für-Schritt-Anleitung

    1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

    2. Modul erstellen: Klicke im Projektfenster mit der rechten Maustaste auf deine Arbeitsmappe und wähle Einfügen > Modul.

    3. Code einfügen: Kopiere den folgenden Code in das Modul:

      Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
      "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
      szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
      
      Sub PicFromURL(Sh As Worksheet, URLColumn As Long, PICColumn As Long, PICWidth As Single, PICHeight As Single)
          Dim lngRow As Long, lngResult As Long
          Dim objPic As Object
          Dim strTmpFile As String, strExt As String
          With Sh
              For Each objPic In .Shapes
                  If objPic.Type = msoPicture Then objPic.Delete
              Next
              For lngRow = 1 To .Cells(Rows.Count, URLColumn).End(xlUp).Row
                  strExt = Mid(.Cells(lngRow, URLColumn).Text, InStrRev(.Cells(lngRow, URLColumn).Text, "."))
                  strTmpFile = Environ("Temp") & "\tmp" & strExt
                  lngResult = URLDownloadToFile(0, .Cells(lngRow, URLColumn).Text, strTmpFile, 0, 0)
                  If lngResult = 0 Then
                      Set objPic = .Pictures.Insert(strTmpFile)
                      objPic.Left = .Cells(lngRow, PICColumn).Left
                      objPic.Top = .Cells(lngRow, PICColumn).Top
                      objPic.ShapeRange.LockAspectRatio = False
                      objPic.Width = PICWidth
                      objPic.Height = PICHeight
                      Kill strTmpFile
                  End If
              Next
          End With
          Set objPic = Nothing
      End Sub
    4. Makro anpassen: Erstelle eine Schaltfläche auf deinem Arbeitsblatt und weise ihr das Makro PicFromURL zu.

    5. Hyperlink zur URL: Stelle sicher, dass in der angegebenen URL-Spalte die Links korrekt sind.

    6. Bilder anzeigen: Führe das Makro aus, um die Bilder in der gewünschten Größe anzuzeigen.


    Häufige Fehler und Lösungen

    • Bild wird nicht heruntergeladen: Überprüfe, ob die URL korrekt ist und ob du eine Internetverbindung hast.
    • Excel stürzt ab: Stelle sicher, dass die Bilddateien nicht zu groß sind. Verwende kleinere Bilder, um eine Überlastung zu vermeiden.
    • Die Bilder sind verzerrt: Achte darauf, dass das Verhältnis von Breite und Höhe bei der Bildbearbeitung beibehalten wird.

    Alternative Methoden

    1. Bild in Kommentar einfügen: Du kannst ein Bild in einen Kommentar der Zelle einfügen. Dies hat jedoch den Nachteil, dass die Dateigröße mit jedem Bild wächst.
    2. Externe Tools verwenden: Nutze Programme wie IrfanView, um Bilder vor dem Einfügen in Excel zu verkleinern, wodurch die Dateigröße minimiert wird.
    3. Mouse-Over-Anzeige: Eine andere Möglichkeit wäre, ein Bild in einem separaten Bereich anzuzeigen, wenn du mit der Maus über den Hyperlink fährst.

    Praktische Beispiele

    • Beispiel für einen Hyperlink: Wenn du eine URL zu einem Bild in Zelle E1 hast, kannst du das Bild in Zelle F1 mit einer Größe von 50x50px anzeigen lassen:

      Private Sub CommandButton1_Click()
          PicFromURL Me, Range("E:E").Column, Range("F:F").Column, 50, 50
      End Sub
    • Hyperlink als Bild anzeigen: Du kannst auch einen Hyperlink in eine Zelle einfügen und das Bild daneben anzeigen, um eine klare Übersicht zu erhalten.


    Tipps für Profis

    • Verwende die ShapeRange.LockAspectRatio-Eigenschaft, um sicherzustellen, dass die Bilder proportional skaliert werden.
    • Teste dein Makro mit verschiedenen Bildgrößen, um die optimale Performance zu finden.
    • Nutze Fehlerbehandlungsroutinen, um unerwartete Fehler beim Herunterladen von Bildern zu vermeiden.

    FAQ: Häufige Fragen

    1. Kann ich Bilder aus einer URL in Excel einfügen?
    Ja, du kannst Bilder aus URLs einfügen, indem du VBA-Makros wie URLDownloadToFile verwendest.

    2. Wie kann ich sicherstellen, dass die Bilder die richtige Größe haben?
    Du kannst die Breite und Höhe in deinem VBA-Code anpassen und sicherstellen, dass die LockAspectRatio-Eigenschaft auf False gesetzt ist.

    3. Gibt es eine Möglichkeit, die Bilder automatisch zu verkleinern?
    Ja, du kannst externe Programme wie IrfanView verwenden, um die Bilder vor dem Einfügen zu verkleinern, oder dein VBA-Skript anpassen, um die Größe entsprechend zu ändern.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige