18.03.2016, 21:56 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2016, 21:57 von MPK-RT.)
Hallo schauan,
gibt es wirklich keine Möglichkeit?
Das mit dem lokalen speichern ist leider keine Option, da wir das Dokument aus unserem DMS (Dokumentenmanagement-System) laden.
Anwendung: Es handelt sich um eine Art "Prozess-Entwicklungslaufzettel", auf dem sämtliche Schritte der Entwicklung von Produkten und deren Prozesse dokumentiert werden. D.h. es werden mehrere Arbeitsschritte abgebildet und bewertet. Zur Bewertung werden auch Fotos zur Veranschaulichung mit eingebunden.
Derzeitige Situation: Die Fotos werden in eine extra Tabelle geladen (skaliert auf 320px * 240px) und dann in die Bewertung in einer anderen Tabelle (selbe Excelfile) als "Thumbnail" eingebunden (copy - paste inkl. skalierung an die Zellengröße), damit das Dokument übersichtlich bleibt. Wenn man mit der Maus über die Zelle fährt, wird das Bild in voller Größe angezeit (Bild über Makro in Kommentar), quasi ein Mouse-Over-Effekt.
Jetzt das Problem: Das Bild wird Quasi zwei mal "in groß" eingebunden = doppelte Datengröße. (einmal extra Tabelle, einmal Kommentar)
Ziel: Um die Datengröße der Excel-Datei klein zu halten, war mein Gedanke der, das Bild bei Mouseover über das Thumbnail in einer Userform anzuzeigen (geladen aus der extra Tabelle). Dann müsste das Bild nicht doppelt in der Excel-Datei eingebunden werden.
Hat von Euch wer eine Idee, wie ich das sonst realisieren könnte?
es gibt da lediglich die Möglichkeit mit Hilfe von API's, ist aber sehr umfangreich. Du kennst Dich mit VBA gut aus? Schaue Dir mal dazu diesen Beitrag an:
Dateiupload bitte im Forum! So geht es: Klick mich!
Du müsstest unter anderem erst mal das Private Sub cmdNeueDatei_Click() überarbeiten, da Du das Bild schon in Deiner Datei hast und da Du ein bestimmtes verarbeiten willst.
Ich habe das Beispiel mal in eine Datei gepackt und hier angehängt.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
vielen Dank! Sieht schon mal nicht schlecht aus. Es geht also doch, bestehende Bilder aus einer Tabelle anzeigen zu lassen.
Das Private Sub cmdNeueDatei_Click() war schnell so angepasst, dass immer das aktuelle Workbook als Basis dient.
Interessant wird jetzt nur wie ich es anstelle, das immer das Bild geladen wird, das angeklickt wird (bzw. MouseOver). D.h. das Auswahlfeld soll gar nicht erst kommen.
Meine VBA Kenntnisse würde ich als "fortgeschrittenen Anfänger" beschreiben. Aber ich lerne jeden Tag dazu..
21.03.2016, 13:44 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2016, 13:45 von snb.)
Code:
Sub M_snb() c00 = "G:\OF\foto.gif"
Sheet1.ChartObjects(1).Chart.Export c00, "GIF" ThisWorkbook.VBProject.VBComponents("Userform1").Designer.Controls("Frame1").Picture = LoadPicture(c00) End Sub
Anpassen:
- G:\OF\Foto.gif muss ein gültiges Pfad und Dateiname sein - es gibt ein Grafik im Arbeitsblatt Sheet1 (Tabelle1) - es muss ein Userform1 geben in der Datei - Userform1 muss ein "Frame1' enthalten
ich machs mal scheibchenweise, weiß nicht, wie weit ich in den nächsten 15 Minuten noch komme .... Testen tu ich alles jedoch erst am Ende, schlimmstenfalls erst morgen..
Kurzversion des Makro's, wo die Datei geöffnet wird. Das Bild muss sich hie rauf dem aktiven Blatt befinden. MouseOver oder zumindest Klick geht eventuell mit Klassenprogrammierung, jetzt arbeite ich aber erst mal an der "Knopfdruckversion"
Code:
Private Sub cmdNeueDatei_Click() On Error Resume Next ' Bildschirmaktualisierung ausschalten Application.ScreenUpdating = False ' Das erste Bild auf Blatt 1 des aktiven ' Workbooks ins Clipboard bringen If BringPictureToClip(ActiveSheet.Name) = "" Then MsgBox "Kein Bild auf Blatt 1" Else Me.Caption = ActiveWindow.Caption ' Bild aus dem Clipboard in das Rahmenfeld ClipboardToPicture End If ' Bildschirmaktualisierung einschalten Application.ScreenUpdating = True End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
hier ist jetzt die andere "Scheibe". Übernommen wird nun das angeklickte Bild. Ist keins angeklickt, kommt die Meldung. Man kann jetzt noch aus dem ersten Makro die Übergabe des Blattnamens wegnehmen und dann hier in der Funktionsdefinition den Ausdruck "strSheetname As String" ... un ddie Meldung anpassen, wenn kein Bild angeklickt ist
Code:
Private Function BringPictureToClip(strSheetname As String) As String On Error GoTo fehlerbehandlung ' Alle Shapes des Blattes durchsuchen If Selection.ShapeRange.Type = msoPicture Then ' Handelt es sich um die gesuchte Bildnummer ' ins Clipboard kopieren Selection.CopyPicture _ Appearance:=xlScreen, Format:=xlBitmap ' Namen des kopierten Bildes zurückgeben BringPictureToClip = Selection.ShapeRange.Name End If fehlerbehandlung: End Function
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)