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

Foto verkleinert einfügen / Chart.Paste Problem

Foto verkleinert einfügen / Chart.Paste Problem
26.09.2019 17:44:29
Roland
Hallo Excel-Profis
Mit unten stehendem Code kann der User ein Foto auf seinem Rechner auswählen. Anschließend wird das Foto in einem Diagramm auf die richtige Grösse verkleinert, nach C:\Temp exportiert und auf das Tabellenblatt eingefügt.
Das hat bis Office 2013 einwandfrei funktioniert. Mit Office 365 bleibt das exportierte Bild entweder weiß oder es wird das Wasserzeichen des Charts angezeigt.
Gemäß diversen Forums-Einträgen muss unter Office 365 die ChartArea ja selektiert werden. Das habe ich gemacht. Das Bild wird aber trotzdem nicht angezeigt.
Komischerweise funktioniert das Programm im Debug-Modus (F8).
Kann mir jemand weiterhelfen?
Herzlichen Dank
Gruß, Roland
Option Explicit
Public Const strFilePathBildKlein As String = "C:\temp\TestFoto.jpg"
Public Const strMyPwd As String = "Test"
Sub FotoVerkleinern()
Dim sngWidth, sngHeight As Single
Dim objChart As Chart, objChartObject As ChartObject
Dim strOrgFaktor, strZellenBreite, strFilePath As String
Dim objBild As Object
strZellenBreite = Range("A5:B5").Width
strFilePath = Application.GetOpenFilename("Only Picture (*.jpg), *.jpg", Title:="Select  _
Picture", MultiSelect:=False)
Set objBild = ActiveSheet.Pictures.Insert(strFilePath)
strOrgFaktor = objBild.Width / objBild.Height
objBild.Cut
sngWidth = strZellenBreite
sngHeight = strZellenBreite / strOrgFaktor
Application.ScreenUpdating = False
Set objChart = Charts.Add
objChart.Activate
ActiveWindow.Zoom = 100
Set objChartObject = objChart.ChartObjects.Add(0, 0, sngWidth, sngHeight)
With objChartObject.Chart
.ChartArea.Select
.Paste
.Export Filename:=strFilePathBildKlein, _
FilterName:="jpg", Interactive:=False
End With
Application.DisplayAlerts = False
objChart.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set objBild = Nothing
End Sub

Sub FotoEinfuegen()
Dim str_FotoNummer As String
Dim lng_ScrollPosition As Long
Application.ScreenUpdating = False
ActiveSheet.Unprotect strMyPwd
mdl_Steuerung.FotoVerkleinern
With Tabelle1
lng_ScrollPosition = ActiveWindow.ScrollRow
Select Case Application.Caller
Case "pic_Foto1"
str_FotoNummer = "pic_Foto1"
Case "pic_Foto2"
str_FotoNummer = "pic_Foto2"
Case "pic_Foto3"
str_FotoNummer = "pic_Foto3"
Case Else
ActiveSheet.Protect strMyPwd
Exit Sub
End Select
.Shapes(str_FotoNummer).Fill.UserPicture (strFilePathBildKlein)
End With
Kill (strFilePathBildKlein)
ActiveSheet.Protect strMyPwd
ActiveWindow.ScrollRow = lng_ScrollPosition
Application.ScreenUpdating = True
End Sub

Sub FotoEntfernen()
Dim str_FotoNummer As String
Dim lng_ScrollPosition As Long
ActiveSheet.Unprotect strMyPwd
With Tabelle1
lng_ScrollPosition = ActiveWindow.ScrollRow
Select Case Application.Caller
Case "pic_FotoDelete1"
str_FotoNummer = "pic_Foto1"
Case "pic_FotoDelete2"
str_FotoNummer = "pic_Foto2"
Case "pic_FotoDelete3"
str_FotoNummer = "pic_Foto3"
Case Else
ActiveSheet.Protect strMyPwd
Exit Sub
End Select
.Shapes(str_FotoNummer).Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.Shapes(str_FotoNummer).Fill.Transparency = 1
End With
ActiveSheet.Protect strMyPwd
ActiveWindow.ScrollRow = lng_ScrollPosition
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Foto verkleinert einfügen / Chart.Paste Problem
26.09.2019 17:56:54
Nepumuk
Hallo Roland,
versuch es mal so:
With objChartObject.Chart
    .Parent.Activate
    .Paste
    .Export Filename:=strFilePathBildKlein, _
        FilterName:="jpg", Interactive:=False
End With

Gruß
Nepumuk
Anzeige
Foto verkleinert per WIA
26.09.2019 18:08:15
Nepumuk
Hallo Roland,
das verkleinern geht so eleganter:
Public Sub ImageResize()
    
    Dim objImageFile As Object
    Dim objImageProcess As Object
    
    Set objImageFile = CreateObject(Class:="WIA.ImageFile")
    Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
    
    Call objImageFile.LoadFile(Filename:="G:\Eigene Dateien\Eigene Bilder\Angelika.jpg") 'Anpassen
    
    Call objImageProcess.Filters.Add(FilterID:=objImageProcess.FilterInfos("Scale").FilterID)
    
    With objImageProcess.Filters(1)
        ' .Properties("PreserveAspectRatio") = True
        .Properties("MaximumWidth") = 100
        .Properties("MaximumHeight") = 100
    End With
    
    Set objImageFile = objImageProcess.Apply(Source:=objImageFile)
    
    Call objImageFile.SaveFile(Filename:="H:\Test.jpg") 'Anpassen
    
    Set objImageFile = Nothing
    Set objImageProcess = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Foto verkleinert per WIA
27.09.2019 17:34:18
Roland
Hallo Nepumuk
Besten Dank für deine schnelle Antwort und sorry, dass ich erst jetzt schreibe, hatte noch andere Sachen um die Ohren.
Deinen Vorschlag mit .Parent.Activate habe ich versucht geht leider auch nicht.
Ich habe noch andere Sachen probiert aber das Bild ist und bleibt einfach weiss. Wissen vermutlich nur die "Microsoft-Götter" warum. ;-)
Ich habe dein Vorschlag das Bild anders zu verkleinern aufgenommen und meinen Bedürfnissen angepasst. Nun funktioniert alles einwandfrei (halt ohne Chart ist in meinem Fall ja auch nicht nötig)
Herzlichen Dank für deine Bemühungen
Gruss, Roland
Anzeige
AW: Foto verkleinert per WIA
27.09.2019 17:35:03
Roland
Hallo Nepumuk
Besten Dank für deine schnelle Antwort und sorry, dass ich erst jetzt schreibe, hatte noch andere Sachen um die Ohren.
Deinen Vorschlag mit .Parent.Activate habe ich versucht geht leider auch nicht.
Ich habe noch andere Sachen probiert aber das Bild ist und bleibt einfach weiss. Wissen vermutlich nur die "Microsoft-Götter" warum. ;-)
Ich habe dein Vorschlag das Bild anders zu verkleinern aufgenommen und meinen Bedürfnissen angepasst. Nun funktioniert alles einwandfrei (halt ohne Chart ist in meinem Fall ja auch nicht nötig)
Herzlichen Dank für deine Bemühungen
Gruss, Roland
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige